Lucene Многоязычное текстовое поле - PullRequest
0 голосов
/ 21 марта 2011

Я посмотрел на этот вопрос - Индексация многоязычных слов в люцене , и это подтвердило некоторые мои подозрения.

У меня есть объект с несколькими полями, которые я хочу проиндексировать.Одно из этих полей может быть одним из нескольких языков, и мне нужно использовать разные анализаторы для каждого языка.

Лучше ли я реализовать это как разные поля в одном и том же индексе или как разные индексы для каждого языка?

Я предполагаю, что компромисс находится между накладными расходами на запуск нескольких индексов и сложностью загромождения одного индекса.

Любой совет приветствуется.

1 Ответ

2 голосов
/ 21 марта 2011

Еще одна идея, которую вы не упомянули: вы можете сделать каждый язык несохраненным, неиндексированным полем. Затем вы можете скопировать все (проанализированные) данные в одно сохраненное + проиндексированное поле, и оно будет вести себя так, как будто вы ищете одно поле. (Это похоже на «Копирование полей» Солра - я не уверен, насколько сложно было бы это сделать в спящем режиме.)

Если вы храните их в отдельных индексах, вы должны заметить, что вы не сможете легко осуществлять поиск по языкам (или, возможно, вообще). Поэтому, если вы хотите разрешить запросы типа «english: foo dutch: foo», они вам понадобятся в том же индексе.

С точки зрения производительности, это будет зависеть от того, какой объем данных используется совместно. Если документы не пересекаются (то есть ни в одном документе нет двух языков), то, вероятно, не будет большой разницы между наличием одного индекса и двумя. Чем больше данных они разделяют, тем больше памяти будет дублировать Lucene, поэтому будет лучше иметь один индекс. Я предполагаю, что это проблема, только если у вас много хранимых данных, но YMMV.

...