Как мне объединить два запроса Lucene с помощью ИЛИ?

Я бы хотел выполнить поиск в моем указателе по двум поля с названиями «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 .

6
задан dmn 23 November 2011 в 17:50
поделиться