Многоязычный поиск произвольного текста в приложении с нормализованными данными?

#search #web-applications #full-text-search #multilingual #database-normalization

#Поиск #веб-приложения #полнотекстовый поиск #многоязычный #база данных-нормализация

Вопрос:

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

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

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

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

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

1. Какую СУБД вы используете? Большинство из них имеют полнотекстовый индекс в качестве своего рода дополнения. Кроме того, вы могли бы хранить разные типы данных в разных индексах solr без денормализации..

2. Да, но обычно они ограничивают один столбец одним языком. Это означает, что в конечном итоге нам понадобится отдельный столбец для каждого языка, который мы поддерживаем, а это неприемлемо.

3. Как насчет создания представления для каждого языка и размещения там индекса?

4. В настоящее время мы используем MS sql Server, и существует множество ограничений на индексацию представлений.

5. Я полагаю, вы это уже видели, и это не соответствует вашим требованиям. но это msdn.microsoft.com/en-us/library/ms187317.aspx говорится, что вы можете индексировать представления. Другим решением может быть создание собственного словаря со всеми языками — см. blogs.msdn.com/b/sqlfts/archive/2009/12/03 /…

Ответ №1:

ETL. Извлекать, преобразовывать, загружать. Другими словами, извлеките данные из существующих баз данных, преобразуйте их (что больше, чем просто денормализация) и загрузите в SOLR. База данных SOLR будет намного меньше существующих баз данных, потому что в ней нет накладных расходов на отношения. И SOLR-поиск снимает большую часть нагрузки с ваших существующих серверов баз данных.

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

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

Обычно вы включаете некоторые ключевые данные в индекс, чтобы при нахождении записи через SOLR search можно было ссылаться непосредственно на исходную базу данных. Кроме того, у вас могут быть нормализованные и ненормализованные данные вместе, например, перечисление может быть записано в нормализованном поле на английском языке, а также в ненормализованном поле на том же языке, что и произвольный текст. Поле можно дублировать, чтобы применить два разных метода анализа и фильтрации.

Вам стоило бы попробовать это на подмножестве ваших данных, чтобы узнать, как работает SOLR и как лучше всего его настроить.