SQL Server 2008 - Как избежать того, чтобы символ "/" был стоп-словом - PullRequest
0 голосов
/ 08 июля 2011

Давайте предположим, что у нас есть большая таблица полнотекстового индекса и есть несколько таких строк (конечно же, в полнотекстовом индексированном столбце):

123.456.789/14  
111.222.22222.2/5111

Эти строки являются числами, которые имеют смысл (для моего приложения), когда они запрашиваются точно так, как я написал.

Когда я выполняю запрос, подобный этому:

WHERE CONTAINS(field, "5111");

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

Есть ли способ избежать возврата частей строк, подобных тем, которые я упомянул? Я думаю, что сервер SQL обрабатывает "/" и "." как стоп-слова, я прав?

1 Ответ

2 голосов
/ 09 июля 2011

Ваша проблема на самом деле с разделителем слов, а не стоп-словами.

"/" и "."рассматриваются как разделители слов используемым (я предполагаю, английским) средством разбиения по словам.

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

Теоретически возможно включить поддержку пользовательского словаря, позволяющую указывать фразы, содержащие разделители слов, которые считаются словами, но это может не дать того, что выwant.

Из вашего примера вы можете определить «789/14» и «2/5111» с помощью пользовательского словаря.Это будет означать, что эти строки не будут возвращены для поиска по "789", "14", "2" или "5111", но они будут возвращены для поиска по "789/ 14 "или" 2/5111 ".

Следующая запись блога описывает настройку поддержки пользовательского словаря в SQL 2008, однако мне не удалось заставить ее работать:

Создание пользовательских словарей для специальных терминов, которые будут индексироваться «как есть» в полнотекстовых индексах SQL Server 2008

...