简体   繁体   English

具有多个匹配字符串的 Jest 弹性搜索查询生成器查询

[英]Jest elastic search Query builder query with multiple match strings

I am trying to query elastic search in Java using Jest.我正在尝试使用 Jest 在 Java 中查询弹性搜索。 I am using a query builder to construct the query.我正在使用查询生成器来构造查询。

QueryBuilder matchQuery = QueryBuilders.boolQuery()
            .must(QueryBuilders.matchQuery("id", "3434"))
            .must(QueryBuilders.matchQuery("name", "name"))
            .must(QueryBuilders.matchQuery("action", "login"))
            .must(rangeQuery);

 //i have this map now 
 Map<String , String> parameters = new HashMap<>();
    parameters.put("id", "3433");
    parameters.put("name", "name");
    parameters.put("action", "login");

It would be great if some one can tell me if this can be constructed dynamically, like the matchQueries.如果有人能告诉我这是否可以像 matchQueries 那样动态构造,那就太好了。 For instance i would have three match queries, but i would have more.例如,我会有三个匹配查询,但我会有更多。 I can put my match query attributes in a Map.我可以将我的匹配查询属性放在地图中。 But if i iterate that how would we can define this boolQuery?但是如果我重复我们如何定义这个 boolQuery? Anyone has any idea on this?有人对此有任何想法吗?

Looking for something like this寻找这样的东西

 QueryBuilder matchQuery = QueryBuilders.boolQuery()
            .must(QueryBuilders.matchQuery(map.key, map.value))

            .must(rangeQuery);

but how would i contruct this dynamically?但我将如何动态构建它?

You can simply iterate over your map and add each condition to the query, like this:您可以简单地遍历地图并将每个条件添加到查询中,如下所示:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();    
for(String key : parameters.keySet()){
  boolQuery.must(QueryBuilders.matchQuery(key, parameters.get(key)));
}
boolQuery.must(rangeQuery);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM