Jest эластичный поиск Запрос построителя запросов с несколькими строками соответствия - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь запросить эластичный поиск в Java, используя Jest. Я использую конструктор запросов для создания запроса.

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. Например, у меня было бы три запроса на совпадение, но у меня было бы больше. Я могу поместить свои атрибуты запроса соответствия на карту. Но если я повторю это, как мы сможем определить этот boolQuery? У кого-нибудь есть идеи по этому поводу?

В поисках чего-то подобного

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

            .must(rangeQuery);

но как бы мне построить это динамически?

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете просто выполнить итерацию по своей карте и добавить каждое условие в запрос, например:

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