Поиск полнотекстового индекса для «c #» - PullRequest
3 голосов
/ 31 мая 2010

У меня есть таблица (скажем, в ней есть один столбец с именем «colLanguage»), который содержит список навыков и для него определен полнотекстовый индекс. Одна из записей в таблице - «c #», но когда я ищу «c #» (используя следующий SQL), я не получаю никаких результатов.

select * from FREETEXTTABLE(tblList, colLanguage, 'c#')

Может кто-нибудь помочь?

Спасибо K

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Мое окончательное решение основано на том факте, что «C #» трактуется иначе, чем «c #». Если буква перед символом «#» является заглавной, то «#» НЕ обрабатывается как символ разрыва слова. Поэтому мне пришлось написать скрипт, обновляющий таблицу, в которой был полнотекстовый индекс, чтобы изменить все 'c #' на 'C #' (затем я запускаю этот скрипт как задание sql, чтобы убедиться, что нет случая любовника c #), и убедиться, что при поиске это «c #» меняется на «C #», что я и сделал в своем коде.

В качестве альтернативы, если у вас есть SQL2008 и вы можете изменить полнотекстовый язык для индекса fts, вы можете настроить его на использование языка 'Neutral' в качестве средства разбиения по словам для индексированных столбцов. «Нейтральный» разделитель слов разбивается только на белый текст. Затем измените команду fts, указав в качестве языка тот, например, выберите * из FREETEXTTABLE (tblList, colLanguage, 'c #', LANGUAGE 0), который вы можете искать для 'c #' или 'C #', без каких-либо других изменений *, кроме перестройки индексов.

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

1 голос
/ 31 мая 2010

Насколько я понимаю, # зарегистрирован как "средство разбиения по словам" и поэтому не добавляется в индекс. Вы можете отменить регистрацию в списке средств разбиения по словам, как описано на этой странице:

http://msdn.microsoft.com/en-us/library/dd207002.aspx

...