Я изучаю 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?