Использование Solr для индексации нескольких языков

#java #lucene #solr

#java #lucene #solr

Вопрос:

Мы настраиваем Solr для индексации документов, где поле заголовка может быть на разных языках. После поиска в Google я нашел два варианта:

  1. Определите разные поля схемы для каждого языка, т. Е. title_en, title_fr, … применяя разные фильтры к каждому языку, затем запросите одно из полей заголовка с соответствующим языком.
  2. Создание разных ядер Solr для обработки каждого языка и корректного выполнения запросов нашего приложения к ядру Solr.

Какой из них лучше? Каковы взлеты и падения?

Спасибо

Ответ №1:

Существует также третий вариант, при котором вы используете общий набор полей для всех языков, но применяете фильтр к полю language . Например, если у вас есть поля text , language вы можете поместить текстовое содержимое для всех языков в text поле и использовать, например, fq=language:english только для извлечения документов на английском языке.

Недостатком этого подхода является то, что вы не можете использовать специфические для языка функции, такие как lemmatisation , stemming и т.д.

Определите разные поля схемы для каждого языка, т. Е. title_en, title_fr, … применяя разные фильтры к каждому языку, затем запросите одно из полей заголовка с соответствующим языком.

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

Создание разных ядер Solr для обработки каждого языка и корректного выполнения запросов нашего приложения к ядру Solr.

Определенно хорошее решение. Но сработает ли для вас отдельное администрирование и небольшие накладные расходы, вероятно, зависит от количества языков, которые вы хотите использовать.

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

Комментарии:

1. Что, если мой индекс содержит 200 тысяч записей для 4 языков? Является ли это хорошим кандидатом для вашего второго подхода (использование полей для каждого языка, т. Е. title_en, title_fr, …)? Спасибо!

2. 200 кб — это не так уж много, поэтому использование отдельных полей кажется прекрасным

Ответ №2:

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

Существует также возможность использования нескольких веб-приложений solr в контейнере сервлета. Так что это может быть вариантом, который вы можете рассмотреть.

Все зависит от гибкости, которой вы обладали в отношении простоев, которые вы могли бы предпринять для устранения любых проблем.

Ответ №3:

  • Если вы используете несколько ядер и вам нужно сегментирование, одна из проблем, которую я вижу, заключается в:

вам нужно будет выполнить сегментирование на каждом языке (ядре). Вы не сможете выполнить сегментирование всего индекса сразу.

  • Если вы используете одно ядро, возможно, вы теряете место из-за «не заполненных» текстовых столбцов, не уверен в этом.