【问题标题】:ElasticSearch Multi Term Query With Java High-Level REST Client使用 Java 高级 REST 客户端的 ElasticSearch 多词查询
【发布时间】:2020-05-04 13:58:14
【问题描述】:

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

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

但我想查询多个字段,例如:“user”="kimchy" 和/或“city”="london"。

我看到了 multi-search 查询和多重匹配查询,但它们没有按照我的意愿进行操作。

感谢您的帮助!

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    试试这个:

    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 方法,取决于你想要的上下文,如果你想要“或”,你可以使用should

    【讨论】:

      【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2020-03-04
        • 2020-08-30
        • 2020-03-26
        相关资源
        最近更新 更多