我正在尝试将一些Java High Level REST客户端代码转换为新的Elasticsearch Java API Client。
我想转换这个查询,如果id等于10或20,它将检索内容。
SearchRequest searchRequest = new SearchRequest().indices(indexName);
List<Long> ids = new ArrayList<>();
ids.add(10l);
ids.add(20l);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("id", ids)));
searchRequest.source(searchSourceBuilder);
使用新的Java API客户端,我构建了类似这样的东西。
TermsQueryField termsQueryField = new TermsQueryField.Builder()
.value(/*Expects List<FieldValue>*/)
.build();
TermsQuery idTerms = new TermsQuery.Builder()
.field("id")
.terms(termsQueryField)
.build();
Query idQuery = new Query.Builder()
.terms(idTerms)
.build();
BoolQuery boolQuery = new BoolQuery.Builder()
.must(idQuery)
.build();
Query query = new Query.Builder()
.bool(boolQuery)
.build();
SearchRequest searchRequest = new SearchRequest.Builder()
.index(indexName)
.query(query)
.build();
我可以为单个值添加termQuery
选项,但我找不到将列表添加到查询的方法。
我遇到了TermsQuery
,但这需要将值设置为List<FieldValue>
,所以这不是很有帮助。
注意:我知道我可以使用lambda表达式来构造这些对象,但在我弄清楚如何使用新的客户端之前,我会尽可能地详细。
1条答案
按热度按时间js5cn81o1#
目前,使用STREAMS似乎是创建术语列表的最简单方式: