繁体   English   中英

Elasticsearch 嵌套查询到 Java API

[英]Elasticsearch Nested Query into Java API

我是 Elasticsearch 和 Java 的新手。我试图转换一个嵌套的 elasticsearch 查询,它同时具有 MUST 和 SHOULD 函数。 有人可以帮忙吗?

GET /list/_search
{
  "size": 12,
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "multi_match": {
                  "query": "city hed",
                  "type": "bool_prefix",
                  "fields": [
                    "cityName":"",
                    "countryCodeName":"",
                    "iso":""
                  ]
                }
              },
              {
                "multi_match": {
                  "query": "city hed",
                  "fuzziness": "AUTO",
                  "fields": [
                    "cityName*"
                    ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "match": {
                  "iso": ""
                }
              },
              {
                "match": {
                  "iso": ""
                }
              }
            ]
          }
        }
      ]
    }
  }
}

它需要方法逻辑,就像它在 Java API 中的样子

如果您使用 Java 高级客户端,请尝试以下操作:

SearchRequest searchRequest = new SearchRequest("idx_name");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

MultiMatchQueryBuilder matchQueryBuilder = QueryBuilders
    .multiMatchQuery("city hed")
    .type(Type.PHRASE_PREFIX)
    .field("cityName")
    .field("countryCodeName")
    .field("iso");

MultiMatchQueryBuilder matchQueryBuilder2 = QueryBuilders
    .multiMatchQuery("city hed")
    .fuzziness("2")
    .field("cityName*");

MatchQueryBuilder matchQuery01 = QueryBuilders.matchQuery("iso", "");
MatchQueryBuilder matchQuery02 = QueryBuilders.matchQuery("iso", "");

BoolQueryBuilder bool01 = QueryBuilders.boolQuery().should(matchQueryBuilder).should(matchQueryBuilder2);
BoolQueryBuilder bool02 = QueryBuilders.boolQuery().should(matchQuery01).should(matchQuery02);

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(bool01).must(bool02);

searchSourceBuilder.query(boolQueryBuilder);

searchRequest.source(searchSourceBuilder);

SearchResponse searchResponse = getClient().search(searchRequest, RequestOptions.DEFAULT);

暂无
暂无

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

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