Индексация многоязычных слов в люцене - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь проиндексировать в Lucene поле, которое может иметь литерал RDF на разных языках. Большинство подходов, которые я видел до сих пор:

  • Используйте один индекс, где каждый документ имеет поле для каждого языка, который он использует, или

  • Используйте M индексов, где M - количество языков в корпусе.

Lucene 2.9+ имеет функцию Payload, которая позволяет прикреплять атрибуты к термину. Кто-нибудь использует этот механизм для хранения информации о языке (или других атрибутах, таких как типы данных)? Как производительность по сравнению с двумя другими подходами? Любой указатель на исходный код, показывающий, как это делается, поможет. Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

так что в основном lucene - это алгоритм ранжирования, он просто смотрит на строки и сравнивает их с другой строкой.они могут быть закодированы в разных кодировках символов, но их сходство одинаково, тем не менее.Просто убедитесь, что вы загружаете SnowBallAnalyzer поддерживаемым языковым стеммером, и вы должны получить результаты.Как скажем испанский или китайский

0 голосов
/ 10 марта 2011

Это зависит.

  1. Вы хотите разрешить что-то вроде: "Поиск по всему английскому тексту для 'foo'"?Если это так, то вам понадобится одно поле для каждого языка.
  2. Или вы хотите "Поиск по всему тексту слова" foo "и представить пользователю, на каком языке найдено совпадение?"Если это то, что вам нужно, то будут работать либо полезные данные, либо отдельные поля.
  3. Альтернативный способ сделать это - проиндексировать весь текст в одном поле, а затем в другом поле указать язык документа.(Предполагается, что каждый документ на одном языке.) Тогда ваш поиск будет выглядеть примерно так: +text:foo +language:english.

С точки зрения эффективности: вы, вероятно, хотите избежать полезных нагрузок, поскольку вам придется повторять название языка для каждого термина, и вы не можете выполнять поиск на основе полезных нагрузок (по крайней мере, нелегко).).

...