Я бы хотел найти свой индекс по двум полям, которые называются «a» и «b». Мне выдаются запросы типа Freud -- theories of psychology
, и я хочу выполнить следующий запрос:
(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);
Но combined
позволяет возвращать результаты там, где встречаются только «теории», а не «психология», где я определенно хочу оба термина. Похоже, что Lucene разделяет «теории психологии» на три слова и объединяет их индивидуально с ИЛИ. Как мне это предотвратить?
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);
, где analyzer
- это просто StandardAnalyzer
объект.