Что произойдет в SQL Server, если полнотекстовый поиск выполняется с использованием полнотекстового индекса, определенного для другого языка
Я новичок в SQL Server полнотекстового поиска.
У меня есть таблица, в которой столбец с названием description имеет тип ntext
и он может содержать данные на любом языке.
Теперь я собирался реализовать полнотекстовый поиск, и немного погуглив, я обнаружил, что в настоящее время нелегко использовать один и тот же индекс для мультиязычности.
Мне было интересно, что произойдет, если я создам полнотекстовый индекс для английского языка с использованием кода 1033 в базе данных, а затем использую тот же индекс для поиска с использованием неанглийской строки и если в некоторых записях есть неанглийские данные.
Будет ли он полностью потерпеть неудачу или он вернет некоторые данные. Какое будет поведение?
1 ответ
Он не будет полностью потерпеть неудачу, но вы будете иметь нежелательное поведение для некоторых поисков. Вот области, которые я могу придумать, где вы столкнетесь с проблемой, хотя это, вероятно, не полный список.
- Слова будут разбиты на части в индексе в соответствии с английскими правилами. (Например:
dog-catcher
разделен так, что он может быть сопоставлен, вы можете искать наdog
или жеcatcher
, Ноdog's
рассматривается как 1 слово и не будет соответствоватьdog
Я уверен, что есть другие языки, в которых эти правила не совпадают или где определенные знаки препинания играют другую роль, и поэтому слова не будут разбиты на части, как ожидалось. - Если вы используете стоп-лист на английском языке, любые неанглийские слова с таким же написанием, что и обычные английские слова (например, is, at, as, can), будут удалены из вашего индекса.
- Вы не сможете использовать
FREETEXT
/FREETEXTTABLE
или жеFORMSOF
потому что они будут использовать английские синонимы и английские инфлективные формы. - Когда используешь
NEAR
правила определения расстояния между словами могут отличаться. - Ищет цитируемые фразы (например:
CONTAINS(*, '"planet earth"')
) может иметь непредсказуемые результаты. Полнотекстовый движок будет применять правила английского языка к тому, как анализируются слова и как обращаться с пунктуацией. Например, при поиске"a. lincoln"
в английском индексе парсер будет думать, чтоa.
является концом предложения и, следовательно, может не соответствовать текстуa lincoln
в указателе. Если вы имеете дело с языком, который имеет разные правила о том, как заканчиваются предложения или как используются точки с сокращениями, то вы можете столкнуться с проблемами. (Это только один пример. Вероятно, есть больше потенциальных проблем.) - Поиски по номерам могут привести к непредсказуемым результатам. Например, на английском языке вы можете использовать запятую в больших количествах (например:
1,234,567
) и полный текст будет соответствовать этому1234567
и наоборот. Если вы имеете дело с языком, который имеет другие правила форматирования чисел, то вы можете столкнуться с проблемами.
Лучше всего использовать нейтральный язык без стоп-листа.