提问者:小点点

Api Java ElasticSearch通过传递列表并返回所有匹配进行搜索


我需要做一个弹性搜索,但我有困难

BoolQueryBuilder query = boolQuery()
            .must(matchQuery(CLIENT_ID, clientId));

fieldValues
      .forEach(fieldValue -> query.must(boolQuery().should(matchQuery(FIELD_NAME, fieldValue))));

fieldValues是一个字符串列表。 我希望列表中所有值与FIELD_NAME字段匹配的结果。 但是我实现它的方式,结果总是0。


共1个答案

匿名用户

这就是使用Elasticsearch query DSL查询的外观

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "clientId": CLIENT_ID
                }
              }
            ],
            "should": [
              {
                "terms": {
                  "FIELD_NAME": [
                    YOUR_TERMS
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

将其转换为Java API将看起来像:

BoolQueryBuilder mainBoolQuery = boolQuery();
BoolQueryBuilder innerBoolQuery = boolQuery();
MatchQueryBuilder clientMatchQueryBuilder = matchQuery(CLIENT_ID, clientId);
TermsQueryBuilder fieldNamesTermQueryBuilder = termsQuery(FIELD_NAME, fieldValues);
innerBoolQuery.must(clientMatchQueryBuilder);
innerBoolQuery.should(fieldNamesTermQueryBuilder);
mainBoolQuery.should(innerBoolQuery);