gpt4 book ai didi

elasticsearch - 将 post_filter 与 Spring Data Elasticsearch 的 NativeSearchQueryBuilder 一起使用

转载 作者:行者123 更新时间:2023-12-02 22:20:11 27 4
gpt4 key购买 nike

我指的是NativeSearchQueryBuilder Spring 数据 Elasticsearch 。

设置post_filter的方法是什么到 nativeSearchQuery ?

使用 native elasticsearch 搜索 api 似乎可行:请参阅 here如下:

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 data elasticsearch 中找到任何方法来做到这一点。

最佳答案

post_filter调用 ElasticsearchTemplate.queryForPage(SearchQuery query, Class<T> clazz) 时隐式使用方法。它将检查 SearchQuery参数包含 filter如果是,它将调用 setPostFilter()在原生 SearchRequestBuilder 上使用该过滤器.

因此,您可以使用 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);

在引擎盖下, ElasticsearchTemplate will set the post_filter 以上 term过滤 name field 。

关于elasticsearch - 将 post_filter 与 Spring Data Elasticsearch 的 NativeSearchQueryBuilder 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com