Я бы хотел выполнить поиск в моем указателе по двум поля с названиями «a» и «b». Мне задают такие запросы, как Freud - theories of Psyology
, и я хотел бы выполнить следующий запрос:
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
Как мне это сделать? Пока что я пусть Lucene построит две половины ( firstHalf
и secondHalf
) с использованием MultiFieldQueryParser
, затем я объединил их с
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
, но вместе
позволяет возвращать результаты там, где найдены только "теории", а не "психология", где мне определенно нужны оба термина. Похоже, Lucene разбивает "теории психологии" на три слова и объединяет их индивидуально с ИЛИ. Как мне предотвратить this?
firstHalf
выглядит так:
Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
new String[]{"Freud", "theories of psychology"},
new String[]{"a", "b"},
new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
analyzer);
где анализатор
- это просто объект StandardAnalyzer
.