#java #lucene #solr
#java #lucene #solr
Вопрос:
Мы настраиваем Solr для индексации документов, где поле заголовка может быть на разных языках. После поиска в Google я нашел два варианта:
- Определите разные поля схемы для каждого языка, т. Е. title_en, title_fr, … применяя разные фильтры к каждому языку, затем запросите одно из полей заголовка с соответствующим языком.
- Создание разных ядер 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:
- Если вы используете несколько ядер и вам нужно сегментирование, одна из проблем, которую я вижу, заключается в:
вам нужно будет выполнить сегментирование на каждом языке (ядре). Вы не сможете выполнить сегментирование всего индекса сразу.
- Если вы используете одно ядро, возможно, вы теряете место из-за «не заполненных» текстовых столбцов, не уверен в этом.