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

У нас есть перечисления, произвольный текст, ссылочные поля и т. Д. В нашей БД.

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

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

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


person sym3tri    schedule 22.04.2011    source источник
comment
Какую СУБД вы используете? Большинство из них имеют полнотекстовый индекс в качестве дополнения. Кроме того, вы можете хранить разные типы данных в разных индексах solr без денормализации.   -  person dfb    schedule 02.08.2011
comment
Да, но они обычно ограничивают один столбец одним языком. Это означает, что в конечном итоге нам потребуется отдельный столбец для каждого поддерживаемого языка, а это неприемлемо.   -  person sym3tri    schedule 02.08.2011
comment
Как насчет создания представления для каждого языка и помещения туда индекса?   -  person dfb    schedule 02.08.2011
comment
В настоящее время мы используем сервер MS SQL, и существует множество ограничений на то, как можно индексировать представления.   -  person sym3tri    schedule 03.08.2011
comment
Я полагаю, вы уже видели это, и это не соответствует вашим требованиям. но это msdn.microsoft.com/en-us/library/ms187317.aspx говорит, что вы можете индексировать представления. Другим решением может быть создание собственного словаря со всеми языками — см. blogs.msdn.com/b/sqlfts/archive/2009/12/03/   -  person dfb    schedule 03.08.2011


Ответы (1)


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

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

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

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

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

person Michael Dillon    schedule 04.08.2011