java - 如何在 QueryBuilders.matchQuery() 中添加过滤器以根据过滤器获取一些匹配的文档
问题描述
我能够ABC-123
使用下面的 java 代码从 elasticsearch 中获取与我的输入代码匹配的文档。但是现在,我想在这里再添加一个条件/过滤器,我想获取我所有匹配ABC-123
的Type
代码Reg
。
SearchRequest searchRequest = new SearchRequest(INDEX);
searchRequest.types(TYPE);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
QueryBuilder qb=QueryBuilders.matchQuery("code", code);
searchSourceBuilder.query(qb);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse1 = null;
try {
searchResponse1 = restHighLevelClient.search(searchRequest);
} catch (IOException e) {
e.getLocalizedMessage();
}
SearchHit[] searchHits1 = searchResponse1.getHits().getHits();
Replacement linkId = null;
Replacement replacement = null;
List<Replacement> linkIDList=new ArrayList<Replacement>();
for (SearchHit hit1 : searchHits1) {
linkId = new Replacement();
Map<String, Object> sourceAsMap1 = hit1.getSourceAsMap();
linkId.setLink_id(sourceAsMap1.get("code"));
linkIDList.add(linkId);
}
请在下面找到我的数据。
id link_id code Type
1001 2001 ABC-123 Reg
1002 2002 ABC-345 Reg
1003 2003 ABC-123 Act
1004 2004 ABC-123 Reg
如果我试图搜索ABC-123
,我只期待
id link_id code Type
1001 2001 ABC-123 Reg
1004 2004 ABC-123 Reg
它,不应该考虑下面的记录。因为它的类型是Act
.
id link_id code Type
1003 2003 ABC-123 Act
谁能有任何想法,我该如何添加filter
我的java代码。?
解决方案
您需要将约束包装在bool/must/filter
查询中,如下所示:
QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("code", code))
.filter(QueryBuilders.termQuery("Type", "Reg"));
searchSourceBuilder.query(qb);
推荐阅读
- silverlight - 使用 Silverlight 和异步加载进行打印
- java - 如果日志格式有多个空格,则 logger.info 的输出带有问号 (?)
- amazon-web-services - AWS API 网关 websocket 问题
- .net-core - SwaggerUI 的 .NetCore API 版本问题
- php - wordpress 中的多参数搜索
- angular - 如何在不添加任何其他验证器的情况下添加异步验证?
- java - for-each 循环如何工作?
- javascript - 有没有更好的方法来对 2 个数组进行逐元素操作
- python - 玩家 1 总是获胜。这是因为 random.shuffle 不是真正随机的还是我犯了逻辑错误?
- android - GridView 不显示 wrap_content 高度 Linearlayout 中的所有项目