ElasticSearch 多术语查询与 Java 高级 REST 客户端



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

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

但我想对多个字段进行查询,例如:"用户"="kimchy"和/或"城市"="伦敦"。

我看到了多搜索查询和多匹配查询,但它们没有做我想要的。

感谢您的帮助!!

试试这个:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder
.filter(QueryBuilders.termQuery("user", "kimchy"))
.filter(QueryBuilders.termQuery("city", "london"));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(boolQueryBuilder);

BoolQueryBuilder上的filter/must/should方法,取决于你想要的上下文,如果你想要"or",你可以使用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);

最新更新