полевой кросс поиск в люцене - PullRequest
0 голосов
/ 30 ноября 2010

Привет: У меня есть два документа:

title                       body
Lucene In Action            A high-performance, full-featured text search engine library.
Lucene Practice             Use lucene in your application

Теперь я ищу "lucene performance", используя

private String[] f = { "title", "body"};
private Occur[] should = { Occur.SHOULD, Occur.SHOULD};
Query q = MultiFieldQueryParser.parse(Version.LUCENE_29, "lucene performance", f, should,new IKAnalyzer());

Тогда я получаю два удара: "Lucene In Action" и "Lucene Practice".

Однако я не хочу "практику Lucene" в результатах поиска.

То есть, я просто хочу, чтобы документы, которым принадлежат все мои условия поиска, могли быть возвращены, "lucene parctice" не содержит термин "производительность", поэтому его не следует возвращать.

Есть идеи?

1 Ответ

2 голосов
/ 30 ноября 2010

Lucene не может совпадать по полям. То есть для запроса "a b" он не будет совпадать с "a" в title и "b" в body. Для этого вам нужно создать еще одно поле, скажем, all_text, в котором заголовок и текст будут проиндексированы.

Кроме того, когда вы ищете "lucene performance" Я полагаю, вы ищете документы, которые имеют оба условия - lucene, а также performance. По умолчанию логическим оператором является OR. Необходимо указать оператор по умолчанию как AND, чтобы соответствовать всем терминам в запросе. (В противном случае в этом случае запрос «производительность lucene» начнет возвращать совпадения, которые говорят о производительности базы данных.)

...