3

我有一个表(假设它有一个名为“colLanguage”的列),其中包含技能列表并在其上定义了全文索引。表中的条目之一是“c#”,但是当我搜索“c#”(使用以下 SQL)时,我没有得到任何结果。

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

任何人都可以帮忙吗?

谢谢K

4

2 回答 2

1

据我了解, # 已注册为“断字”,因此未添加到索引中。您可能可以按照本页所述从分词器列表中注销它:

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

于 2010-05-31T15:40:24.010 回答
1

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

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

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

于 2010-07-09T11:47:26.773 回答