我正在尝试使用Jest查询Java中的 flex 搜索。我正在使用查询生成器来构建查询。

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");

如果有人可以告诉我它是否可以动态构建(例如matchQueries),那将是很好的。例如,我将有三个匹配查询,但我会有更多。我可以将匹配查询属性放在 map 中。但是,如果我迭代该如何定义这个boolQuery呢?有人对此有任何想法吗?

寻找这样的东西
 QueryBuilder matchQuery = QueryBuilders.boolQuery()
            .must(QueryBuilders.matchQuery(map.key, map.value))

            .must(rangeQuery);

但是我将如何动态地构造它?

最佳答案

您可以简单地遍历 map 并将每个条件添加到查询中,如下所示:

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

09-29 22:01