猿问

使用 Java 高级 REST 客户端进行 ElasticSearch 多术语查询

java -high-level-rest-client提供了一种使用代码下方显示的术语在 elasticsearch 上进行搜索的方法

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));

但我想对多个字段进行查询,如下所示:“user”=“kimchy”和/或“city”=“london”。

我看到多重搜索查询和多重匹配查询,但它们没有执行我想要的操作。

谢谢您的帮助!!


侃侃尔雅
浏览 90回答 2
2回答

12345678_0001

尝试这个:BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder    .filter(QueryBuilders.termQuery("user", "kimchy"))    .filter(QueryBuilders.termQuery("city", "london"));SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(boolQueryBuilder);的filter/must/should方法BoolQueryBuilder,取决于你想要哪个上下文,如果你想要“或”,你可以使用should。

森林海

大家可以试试这个。BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();            foreach (var term in (s + ',' + t).Split(','))            {                booleanQuery.add(new TermQuery(new Term("content", term)), BooleanClause.Occur.SHOULD);            }            //booleanQuery.add(new TermQuery(new Term("content", s)), BooleanClause.Occur.MUST);            //booleanQuery.add(new TermQuery(new Term("content", t)), BooleanClause.Occur.MUST);            TopDocs hits = searcher.search(booleanQuery.build(), int.MaxValue);
随时随地看视频慕课网APP

相关分类

Java
我要回答