Я попробую описать проблему. Допустим, у нас есть документ lucene с полями TITLE, DESC, TYPE. Теперь я искать по этим направлениям, как это:Как умышленно игнорировать подзапрос фильтра в Hibernate Search?
org.apache.lucene.search.Query titleQuery = prepareTitleQuery();
org.apache.lucene.search.Query descQuery = prepareDescQuery();
org.apache.lucene.search.Query mainQuery = queryBuilder.bool().should(titleQuery).should(descQuery).createQuery()
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(mainQuery, Class.class);
fullTextQuery.enableFullTextFilter("typeFilter").setParameter("types", types);
Это очень упрощенный код, просто чтобы дать общее понимание того, что я делаю.
Теперь пример:
TITLE | DESC | TYPE
Some title | hibernate search | 1
Another title | lucene | 1, 3
Something here | search lucene | 2, 8, 3
Я ищу, как это:
TITLE:Another
DESC:lucene
TYPE:1
Он найдет только вторую строчку. Но мне нужна третья строка. Есть ли способ сделать фильтр применимым только к titleQuery
, но не к descQuery
? Также у меня есть другие фильтры и сортировка, которые должны применяться к обоим.
Привет, спасибо. Наконец я пришел к этому сам. Это то, что я сделал: 'для (Тип типа: типы) {' 'titleQuery = queryBuilder.bool(). Must (titleQuery) .must (queryBuilder.keyword(). OnField (" types.id ") .matching (type.getId()). createQuery()). createQuery(); ' '} ' –