Elasticsearch REST High Level Client объединяет построителей запросов - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно создать что-то вроде расширенного поиска, используя ES REST High Level Client (Java).
Во-первых, у меня есть ключевое слово для поиска, которое ищет все поля.
Я использую QueryStringQueryBuilder для этого.

SearchSourceBuilder ticketInfoSourceBuilder = new SearchSourceBuilder();
ticketInfoSourceBuilder.from(pageable.getOffset());
ticketInfoSourceBuilder.size(pageable.getPageSize());
ticketInfoSourceBuilder.sort(new FieldSortBuilder(sortField).order(sortOrder));
ticketInfoSourceBuilder.query(QueryBuilders.queryStringQuery("ABC1234"));

Теперь мне нужно добавить еще несколько фильтров, используя TermsQueryBuilder.

Можно ли объединить два построителя запросов?

Я хотел бы добавитьследующие фильтры:

"terms" : { "ticket.inquiryType" : ["INQTYP01", "INQTYP06"]}
"terms" : { "ticket.status" : ["NEW", "CLOSED"]}
"terms" : { "ticket.ownership" : ["OWNED", "OTHER_OWNER"]}

Можно ли объединить оба построителя запросов для достижения чего-то вроде расширенного поиска?

Спасибо!

1 Ответ

0 голосов
/ 05 июня 2018

Да, вы можете сделать это с помощью запроса bool, например:

QueryBuilder query = QueryBuilders.boolQuery()
   .must(QueryBuilders.queryStringQuery("ABC1234"))
   .filter(QueryBuilders.termsQuery("ticket.inquiryType", "INQTYP01", "INQTYP06"))
   .filter(QueryBuilders.termsQuery("ticket.status", "NEW", "CLOSED"))
   .filter(QueryBuilders.termsQuery("ticket.ownership", "OWNED", "OTHER_OWNER"));
ticketInfoSourceBuilder.query(query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...