2009-12-21 3 views
9

Я использую Porter стеммер, чтобы остановить слова, и вот проблема, я бег в:Зенда проблема Lucene со словом «ипотека»

Слова «ипотека» правильно стебли в «mortgag» Слова «залогодержатель» является (возможно, ошибочно) стеблями в «ипотеку»

есть около 100 документов со словом «ипотекой» Существует один документ со словом «залогодержателем»

Когда я построить индекс без сдачи " залогодержателя "в любых документах, все работает нормально: поиск" ипотеки "или" ипотеки "или" mor tgag "возвращает все 100 документов.

Когда я создаю индекс, а один из документов содержит «залогодержатель», поиск индекса для «ипотеки» возвращает только один документ с «залогодержателем» (который был сведен к «ипотеке»). Однако поиск «ипотеки» или «ипотеки» возвращает все 100 документов.

Единственный логический вывод, который я могу сделать из этой проблемы, - это lucene сначала ищет искомое слово, и если он не находит каких-либо результатов, он продолжает поиск слова. Таким образом, при поиске «ипотеки» он сначала находит «ипотеку», которая была основана на «залогодержателе» и прекращает поиск. Это правильное поведение, или это ошибка?

ответ

1

Это звучит как ошибка для меня. Руководящий принцип поиска Lucene гласит: «Поиск с использованием того же анализатора, который вы использовали для индексирования, если у вас нет реальной причины не делать этого». После анализа и завершения, Lucene должен возвращать спички для поисковых терминов, которые он имеет.

В вашем случае «закладная» была преобразована в «залоговое средство» при индексировании. Процесс извлечения должен отразить это, а также преобразовать «залог» в «ипотечный кредит», а затем найти матчи для «ипотечных кредитов» (которые представляют собой «ипотека»).

Похоже, что во время поиска вы не ставите запрос, что приводит к ошибочным результатам. Если этот ответ неясен, отредактируйте свой вопрос и добавьте несколько строк кода, описывающих, как вы создаете индекс и как его искать.

Смежные вопросы