我需要对 flex 搜索进行搜索,但是遇到了困难
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的查询样子
BoolQueryBuilder mainBoolQuery = boolQuery();
BoolQueryBuilder innerBoolQuery = boolQuery();
MatchQueryBuilder clientMatchQueryBuilder = matchQuery(CLIENT_ID, clientId);
innerBoolQuery.must(clientMatchQueryBuilder);
fieldValues.forEach(value -> {
TermQueryBuilder fieldNamesTermQueryBuilder = termQuery(FIELD_NAME, value);
innerBoolQuery.must(fieldNamesTermQueryBuilder);
});
mainBoolQuery.should(innerBoolQuery);