我需要做一个弹性搜索,但我有困难
BoolQueryBuilder query = boolQuery()
.must(matchQuery(CLIENT_ID, clientId));
fieldValues
.forEach(fieldValue -> query.must(boolQuery().should(matchQuery(FIELD_NAME, fieldValue))));
fieldValues是一个字符串列表。 我希望列表中所有值与FIELD_NAME字段匹配的结果。 但是我实现它的方式,结果总是0。
这就是使用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);