Использование Solr для индексирования нескольких языков
Мы создаем Solr для индексирования документов, где поле заголовка может быть на разных языках. После googling я нашел два варианта:
- Определите различные поля схемы для
каждый язык, т.е. title_en,
title_fr,... применение разных
фильтры на каждый язык, затем запрос
одно из полей заголовка с
соответствующий язык.
- Создание
различные сердечники Solr для обработки каждого
язык и сделать наш запрос приложения
правильное ядро Solr.
Какой из них лучше? Каковы взлеты и падения?
Спасибо
Ответы
Ответ 1
Существует также третий вариант, когда вы используете общий набор полей для всех языков, но применяете фильтр к полю language
. Например, если у вас есть поля text
, language
, вы можете поместить текстовое содержимое для всех языков в поле text
и использовать, например, fq=language:english
, только для получения английских документов.
Недостатком этого подхода является то, что вы не можете использовать языковые функции, такие как lemmatisation
, stemming
и т.д.
Определите разные поля схемы для каждого языка, т.е. title_en, title_fr,... применяя различные фильтры к каждому языку, затем запрашивайте одно из полей заголовка с соответствующим языком.
Этот подход обеспечивает хорошую гибкость, но будьте осторожны с большим объемом памяти и сложностью при наличии многих языков. Это можно смягчить, используя несколько серверов solr.
Создание различных ядер Solr для обработки каждого языка и внесение нашего запроса на запрос правильного ядра Solr.
Определенно хорошее решение. Но независимо от того, будет ли отдельная администрация и небольшие накладные расходы работать на вас, вероятно, связано с количеством языков, которые вы хотите использовать.
Если первый подход не применим, я, вероятно, склоняюсь к второму, если масштабирование ядер не будет желательным. Любой подход хорош, хотя, и я думаю, что это принципиально сводится к предпочтению.
Ответ 2
Все зависит от ваших требований. Я предполагаю, что вам не нужно запрашивать несколько языков в одном запросе. В этом случае расщепление их на несколько ядер было бы лучшей идеей, так как вы можете настроить это ядро, не затрагивая другие ядра и индекс. С несколькими языками будет какая-то настройка или другая, связанная с тем, что происходит, проверка орфографии и другие функции (если вы планируете их использовать).
В контейнере сервлетов также есть опция нескольких веб-приложений solr. Таким образом, это может быть вариант, на который вы можете посмотреть.
Все зависит от гибкости, которую вы имели в отношении времени простоя, которое вы могли бы предпринять, чтобы исправить любые проблемы.
Ответ 3
- Если вы используете несколько ядер, и вам нужно оштрафовать, одна из проблем, которые я вижу, - это:
вам нужно будет сделать осколки на каждом языке (ядре). Вы не сможете делать осколки всего индекса сразу.
- Если вы используете одно ядро, возможно, вы теряете пространство с текстовыми столбцами, которые "не заполнены", не уверены в этом.