ПОЛНЫЙ ТЕКСТ поиск с многоязычной колонкой - PullRequest
11 голосов
/ 07 октября 2010

Есть ли способ использовать FULLTEXT в многоязычной таблице без указания каждому языку своего столбца?

У меня есть один столбец, который мне нужно найти, но язык в этом столбце различен:

ProductID    int
Description  nvarchar(max)
Language     char(2)

Language может быть одним из: en, de, it, kr, th

В настоящее время я строю соответствие и использую его для поиска. Но это только для английского, немецкого и итальянского языков, и даже для тех, кого он не поддерживает. Все остальное использует LIKE '%searchterm%', и я пытаюсь улучшить это.

Я использую SQL Server 2005.

Ответы [ 4 ]

13 голосов
/ 07 октября 2010

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

4 голосов
/ 12 марта 2014

Я знаю, что это старый вопрос, но я только что столкнулся с ним.

Один из подходов, которые я видел, - это использование столбца XML и указание атрибута xml:lang. Как упомянуто в CREATE FULLTEXT INDEX (Transact-SQL) .

Для документов, хранящихся в столбцах типа XML или BLOB, язык кодировка в документе будет использоваться во время индексации. За Например, в столбцах XML атрибут xml: lang в документах XML будет определить язык. Во время запроса, ранее указанное значение в language_term становится языком по умолчанию, используемым для полнотекстового запросы, если language_term не указан как часть полнотекстового запрос.

Основным недостатком этого подхода является то, что он меняет тип данных на XML, но в то время он, похоже, отлично работал для наших нужд.

4 голосов
/ 07 октября 2010

Цитирование из ссылки Microsoft на CREATE FULLTEXT INDEX :

Для столбцов без BLOB и без XML содержащие текстовые данные в нескольких языки, или для случаев, когда язык текста, хранящегося в столбец неизвестен, это может быть подходит для вас, чтобы использовать нейтральный (0x0) языковой ресурс. Тем не мение, сначала вы должны понять возможные последствия использования нейтральный (0x0) языковой ресурс. За информация о возможном решения и последствия использования нейтральный (0x0) языковой ресурс, см. Рекомендации по выбору Язык при создании полнотекстового Индекс .

2 голосов
/ 09 января 2014

Я использую представления для 20+ языков.Хорошо работает для запросов (если немного сложно выбрать правильный вид для использования в sprocs).Тем не менее, вставки и обновления в базовой таблице блокируются, так как план, по-видимому, должен включать проверку для каждого просмотра ft даже без отслеживания изменений.

...