Как настроить толкенизаторы с индексацией и поиском с помощью Lucene и Nhibernate - PullRequest
0 голосов
/ 11 марта 2011

Это вопрос использования Lucene через пространство имен NHibernate.Search, которое работает совместно с Lucene.

Я индексирую Заголовок в указателе: Анатомия Грея

Title : "Grey's Anatomy"

Используя Люка, я вижу, что этот заголовок становится токенизированным в:

Title: anatomy
Title: grey

Теперь я получаю результат, если ищу:

"grey" or "grey's"

Однако, если я ищу "серые" , тогда я ничего не получаю.

Я бы хотел, чтобы "серые" вернули результат. И я думаю, это может быть проблемой с любым словом с апострофом.

Итак, вот несколько вопросов:

  1. Правильно ли я думаю, что мог бы решить эту проблему, либо изменив что-либо во время индекса (то есть, изменив толькенизатор .. ??), либо изменив время запроса (парсер запросов?)
  2. Если есть решение, может кто-нибудь предоставить небольшой пример кода?

спасибо

1 Ответ

1 голос
/ 11 марта 2011

Если вы выполняете классический поиск по термину с использованием Lucene, то, скорее всего, он не будет отображаться в результатах, за исключением того, что вы выполняете хорошую работу по токенизации при сохранении, поэтому, откуда я это вижу, у вас есть 2 варианта или третийbeign их комбинация:

  1. Используйте Stemmer для индексированных данных и запросов.Stemmers быстрые, и вы всегда можете найти реализацию Steter Stemer где-нибудь в Google .Проблема в том, что вы ищете разные языки.
  2. Используйте нечеткие запросы.Используя Fuzzy Query, вы можете установить расстояние редактирования, которое вы хотите убрать из поиска.Дело в том, что, поскольку 2 слова «близки» с использованием расстояния редакции (т. Е. Lehvenstein), это не означает, что они одинаковы, но проблему Грея, Грея и Грейса следует решить, установив расстояние редактирования 2.

Я думаю, что вы сможете найти достойную реализацию Porter Stemmer, что неплохо, верно здесь .

Надеюсь, я смогу помочь!

...