Как проиндексировать строку типа "aaa.bbb.ddd-fff" в Lucene? - PullRequest
1 голос
/ 28 мая 2010

Я должен проиндексировать много документов, которые содержат ссылочные номера, такие как "aaa.bbb.ddd-fff". Структура может измениться, но это всегда произвольные числа или символы в сочетании с "/", "-", "_" или каким-либо другим разделителем.

Пользователи хотят иметь возможность поиска любой из подстрок, таких как "aaa" или "ddd", а также комбинаций, таких как "aaa.bbb" или "ddd-fff". Лучшее, что я смог придумать, - это создать свой собственный фильтр токенов, смоделированный после фильтра синонимов в «Lucene in action», который выделяет несколько терминов для каждого ввода. В моем случае я возвращаю «aaa.bbb», «bbb.ddd», «bbb.ddd-fff» и все другие комбинации подстрок. Это работает довольно хорошо, но когда я индексирую большие документы (100 МБ), которые содержат много таких строк, я, как правило, получаю исключения из памяти, потому что мой фильтр возвращает несколько терминов для каждой входной строки.

Есть ли лучший способ индексировать эти строки?

1 Ответ

0 голосов
/ 28 мая 2010

Я бы попытался создать фильтр токенов, который:

  1. Извлекает токены, разделенные разделителями, например, ааа, bbb, ddd, fff.
  2. Извлекает разделители как отдельные токены.
  3. Может быть, добавляет токен-разделитель для предотвращения совпадения между номерами.

Для запроса я сначала попробую логический запрос с СЛЕДУЮЩИМИ терминами. Если это дает слишком много ложных срабатываний, я бы изменил это на ОБЯЗАТЕЛЬНО. Если это все еще слишком много, я бы попробовал PhraseQuery.

...