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

Pra*_*i g 8 elasticsearch

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

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

searchRequestBuilder.setQuery(QueryBuilders.matchQuery(query_key, query_val)).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

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

我如何为此修改相同的内容?

Aru*_*ash 20

您可以使用MuliMatchQueryBoolean Query来满足您的要求.

例如: -

BoolQueryBuilder boolQuery = new BoolQueryBuilder();
for (Map.Entry<String, String> entry : fields.entrySet()){
    boolQuery.must(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));
}
Run Code Online (Sandbox Code Playgroud)

boolQuery在您searchRequest阅读elasticsearch boolQueries中设置此项并使用符合您要求的项目.

以上示例将AND在提供的字段中执行操作.的field1field2必须匹配.如果你想执行OR操作,那么你应该使用sould查询你有一个选项来设置minimum_should_match你可以指定应该匹配的最小字段.