2010-05-31 3 views
3

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

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

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

Благодаря K

ответ

1

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

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

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

1

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

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

+0

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

+0

Используя следующее, вы сможете найти слово breaker для своего языка, но не разрешить вам редактировать список нарушающих работу символов , Кажется, вам нужно написать свой собственный прерыватель слов или канаву FTS, если вы хотите это сделать. SELECT * FROM sys.fulltext_languages; EXEC sp_help_fulltext_system_components 'wordbreaker'; –

Смежные вопросы