java - 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。
解决方案
这就是使用 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);
innerBoolQuery.must(clientMatchQueryBuilder);
fieldValues.forEach(value -> {
TermQueryBuilder fieldNamesTermQueryBuilder = termQuery(FIELD_NAME, value);
innerBoolQuery.must(fieldNamesTermQueryBuilder);
});
mainBoolQuery.should(innerBoolQuery);
推荐阅读
- amazon-web-services - 在 AWS SageMaker GroundTruth 中如何计算置信度分数?
- python - 找到两组交替出现重叠的字符串之间的字符串
- asp.net-core - 如何仅删除使用 Javascript 从网页中删除的图像
- java - 我收到“线程中的异常“AWT-EventQueue-0”java.lang.NullPointerException”错误
- hibernate - 日志中的 Arjuna 警告(多个线程处于活动状态)
- c# - EF Core 插入新记录 - System.ArgumentNullException:值不能为空。参数名称:key
- jmeter - 如何在 JMeter POST 请求中发送压缩的 json 输入?
- css - 如何在透明元素内制作盒子阴影
- c# - 控制最小化表单
- javascript - 使用 AJAX 调用 HTML 数据时网格框显示错误