Как использовать логические операторы с Hibernate Search

Я изучаю Hibernate Search Query DSLи не знаю, как создавать запросы с использованием логических аргументов, таких как И или ИЛИ.

Например, предположим, что я хочу вернуть все записи людей, у которых значение firstNameравно "bill" или "bob".

Следуя документации по спящему режиму, в одном примере используется метод bool() с двумя подзапросами, например:

QueryBuilder b = fts.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();
Query luceneQuery = b.bool()
    .should(b.keyword().onField("firstName").matching("bill").createQuery())
    .should(b.keyword().onField("firstName").matching("bob").createQuery())
    .createQuery();

logger.debug("query 1:{}", luceneQuery.toString());

Это в конечном итоге создает нужный мне запрос lucene, но является ли это правильным способом использования логической логики с поиском в спящем режиме? ? Является ли «должен()» эквивалентом «ИЛИ» (аналогично, соответствует ли «должен()» «И»)?

Кроме того, такое написание запроса кажется громоздким. Например, что, если бы у меня была коллекция firstNames для сопоставления? Подходит ли этот тип запроса для DSL?

8
задан NobodyMan 19 April 2012 в 00:51
поделиться