目前我在ES中查询单个键值对,如下所示:
String query_key = "abc";
String query_val = "def";
searchRequestBuilder.setQuery(QueryBuilders.matchQuery(query_key, query_val)).execute().actionGet();
现在,我没有使用单个键值对,而是拥有以下键值对映射:Map<String,String> query_list
如何为此修改相同内容?
答案 0 :(得分:17)
您可以使用MuliMatchQuery或Boolean Query来满足您的要求。
例如: -
BoolQueryBuilder boolQuery = new BoolQueryBuilder();
for (Map.Entry<String, String> entry : fields.entrySet()){
boolQuery.must(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));
}
在boolQuery
中设置此searchRequest
,阅读elasticsearch boolQueries并使用符合您要求的那个。
以上示例将在提供的字段中执行AND
操作。 field1
和field2
必须匹配。如果您要执行OR
操作,那么您应该使用sould
查询,您可以选择设置minimum_should_match
,因为您可以指定应匹配的最小字段。