为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2023-09-27 14:34:51
java -high-level-rest-client提供了一种使用代码下方显示的术语在 elasticsearch 上进行搜索的方法SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();  sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));但我想对多个字段进行查询,如下所示:“user”=“kimchy”和/或“city”=“london”。我看到多重搜索查询和多重匹配查询,但它们没有执行我想要的操作。谢谢您的帮助!!
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

尝试这个:


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。


查看完整回答
反对 回复 2023-09-27
?
森林海

TA贡献2011条经验 获得超2个赞

大家可以试试这个。


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);


查看完整回答
反对 回复 2023-09-27
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信