[英]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_filter
, ElasticsearchTemplate
将在name
字段上设置带有以上term
过滤器的post_filter
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.