如何在 QueryBuilders.matchQuery() 中添加过滤器以根据过滤器获取一些匹配的文档
how to add filters in QueryBuilders.matchQuery() to get some matching documents based on filter
我能够从 elasticsearch 中获取文档,该文档与我的输入代码 ABC-123
和下面的 java 代码相匹配。但是现在,我想在这里再添加一个条件/过滤器,
我想获取我所有的匹配代码 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
谁能知道我如何在我的 java 代码中添加 filter
。 ?
您需要将约束包含在 bool/must/filter
查询中,如下所示:
QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("code", code))
.filter(QueryBuilders.termQuery("Type", "Reg"));
searchSourceBuilder.query(qb);
我能够从 elasticsearch 中获取文档,该文档与我的输入代码 ABC-123
和下面的 java 代码相匹配。但是现在,我想在这里再添加一个条件/过滤器,
我想获取我所有的匹配代码 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
谁能知道我如何在我的 java 代码中添加 filter
。 ?
您需要将约束包含在 bool/must/filter
查询中,如下所示:
QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("code", code))
.filter(QueryBuilders.termQuery("Type", "Reg"));
searchSourceBuilder.query(qb);