Я изучаю Hibernate Search Query DSL, и я не уверен, как создавать запросы с использованием логических аргументов, таких как AND или OR.Как использовать логические операторы с Hibernate Search
Например, предположим, что я хочу вернуть все записи людей, у которых есть значение «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, что я хочу, но это правильный способ использовать логическая логика с поиском в спящем режиме? Является ли «should()» эквивалентом «OR» (аналогично, «must()» соответствует «AND») ?.
Кроме того, при написании запроса этот способ кажется громоздким. Например, что, если бы я имел коллекцию firstNames для сопоставления? Является ли этот тип запросов хорошим совпадением для DSL в первую очередь?
'must' является' and', но 'should' кажется, что какое-то мягкая версия' and'. Определенно не 'или'. В теории вы можете получить 'или' как 'not and not', получив' must (b.must(). Not(). Must(). Not()). Not() ', но это не очень удовлетворительный ответ. – trutheality