用于匹配elasticsearch中多个字段的Java API

时间:2014-12-02 12:15:24

标签: elasticsearch

目前我在ES中查询单个键值对,如下所示:

String query_key = "abc";
String query_val = "def";

searchRequestBuilder.setQuery(QueryBuilders.matchQuery(query_key, query_val)).execute().actionGet();

现在,我没有使用单个键值对,而是拥有以下键值对映射:Map<String,String> query_list

如何为此修改相同内容?

1 个答案:

答案 0 :(得分:17)

您可以使用MuliMatchQueryBoolean 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操作。 field1field2必须匹配。如果您要执行OR操作,那么您应该使用sould查询,您可以选择设置minimum_should_match,因为您可以指定应匹配的最小字段。