繁体   English   中英

将post_filter与Spring Data Elasticsearch的NativeSearchQueryBuilder结合使用

[英]Using post_filter with Spring Data Elasticsearch's NativeSearchQueryBuilder

我指的是NativeSearchQueryBuilder春季数据NativeSearchQueryBuilder

post_filter设置为post_filter方法是nativeSearchQuery

原生的Elasticsearch搜索API似乎可行:请参见此处和如下内容:

SearchResponse response = client.prepareSearch("index1", "index2")
        .setTypes("type1", "type2")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("multi", "test"))             // Query
        .setPostFilter(FilterBuilders.rangeFilter("age").from(12).to(18))   // Filter
        .setFrom(0).setSize(60).setExplain(true)
        .execute()
        .actionGet();

但是我没有在Spring数据Elasticsearch中找到任何方法来实现它。

所述post_filter当调用被隐含使用ElasticsearchTemplate.queryForPage(SearchQuery query, Class<T> clazz)方法。 它将检查SearchQuery参数是否包含filter ,如果包含,则将在本机SearchRequestBuilder上使用该过滤器调用setPostFilter()

因此,您可以使用NativeSearchQueryBuilder构造查询,如下所示:

private ElasticsearchTemplate elasticsearchTemplate;

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withQuery(matchAllQuery())                     <--- your query
    .withFilter(termFilter("name", "somename"))     <--- your post filter
    .build();

Page<SampleEntity> sampleEntities =
    elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);

post_filterElasticsearchTemplate name字段上设置带有以上term过滤器post_filter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM