2010-05-31 110 views
3

我有一张表(可以说它有一列叫做“colLanguage”),它包含一系列技能并且在其上定义了全文索引。表中的一个条目是'c#',但是当我搜索'c#'时(使用以下SQL),我没有返回结果。搜索“c#”的全文索引

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

任何人都可以帮忙吗?

感谢 ķ

回答

1

我的最终解决方案是基于“C#”区别对待,以“C#”的事实。当'#'字符之前的字母是大写字母时,'#'不被视为分词字符。因此,我必须编写一个脚本更新全文索引所在的表,将所有'c#'更改为'C#'(然后将此脚本作为sql作业运行,以确保没有任何情人案例c#),并确保当我在我的代码中搜索'c#'被改为'C#'时。

或者,如果您有SQL2008并且可以更改fts索引的全文语言,您可以将它设置为使用'Neutral'语言作为索引列的分词器。 '中立'字词断言只在白色文本中出现。然后改变你的fts命令以指定它作为使用的语言,例如select * from FREETEXTTABLE(tblList,colLanguage,'c#',LANGUAGE 0)除了重建索引之外,您可以搜索'c#'或'C#',无需其他更改*。

*您可能需要更改数据库实例的“默认全文语言”,我不得不这样做。

1

据我了解,#被注册为“断字”等不添加到索引。因为这页所述,您也许能够从分词的列表注销它:

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

+0

我需要看看这个答案,看看我能否做到这一点之前,我将它标记为答案 – 2010-06-14 08:14:19

+0

使用以下将使您能够找到您的语言的分词符,但不能让您编辑工作中断字符的列表。如果你想这样做,你似乎必须编写自己的分词器或沟FTS。 SELECT * FROM sys.fulltext_languages; EXEC sp_help_fulltext_system_components'wordbreaker'; – 2010-07-07 15:32:52