繁体   English   中英

使用 org.elasticsearch:elasticsearch java 库构建 ElasticSearch 查询

[英]Build ElasticSearch Query using org.elasticsearch:elasticsearch java library

我想使用 BoolQueryBuilders 和聚合器构建以下 ES 查询,但我无法做到这一点。

{
  "size": 0,
  "query": {
    "bool": {
      "should": {
        "bool": {
          "filter": [
            {
              "terms": {
                "country": [
                  "France",
                  "China"
                ]
              }
            },
            {
              "term": {
                "lang": "en"
              }
            }
          ]
        }
      }
    }
  },
  "aggs": {
    "group_by_country": {
      "terms": {
        "field": "country",
        "size": 0
      },
      "aggs": {
        "top_hits_country": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

我可以通过以下方式在没有聚合器的情况下构建此查询 -

BoolQueryBuilder innerEntityQueryBuilder = new BoolQueryBuilder();
        
BoolQueryBuilder queryBuilder = new BoolQueryBuilder()
                    .filter(QueryBuilders.termsQuery("country", countries)) 
                    .filter(QueryBuilders.termQuery("lang", "en")); 
innerEntityQueryBuilder.should(queryBuilder);

我如何添加聚合部分?

像这样:

SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("index1");

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0);

BoolQueryBuilder bqb = new BoolQueryBuilder()
        .filter(QueryBuilders.termsQuery("country", "France","China"))
        .filter(QueryBuilders.termQuery("lang", "en"));
searchSourceBuilder.query(bqb);


TermsAggregationBuilder group = AggregationBuilders
        .terms("group_by_country").field("country")
        .size(0);
TopHitsAggregationBuilder topHit = AggregationBuilders.topHits("top_hits_country").size(1);
group.subAggregation(topHit);

searchSourceBuilder.aggregation(group);

searchRequest.source(searchSourceBuilder);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM