为什么SQL全文索引不返回包含#的单词的结果?

时间:2008-08-04 05:51:57

标签: sql sql-server sql-server-2005 indexing full-text-search

例如,我的查询类似于以下使用SQL Server 2005:

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

我定义了一个全文索引来使用SearchField列,它在使用时返回结果:

SELECT * FROM Table WHERE SearchField LIKE '%c#%'

我相信#是一封特殊字母,那么如何让FREETEXT正常运行上述查询呢?

2 个答案:

答案 0 :(得分:12)

#char被标记为标点符号,因此被忽略,所以看起来我们将从我们的单词索引忽略列表中删除字母C.

在执行此操作并重建索引后在本地测试它,我得到了结果!

在索引列上使用不同的分词系统语言,以便不会忽略这些特殊字符。

编辑:我还找到了this information

  

c#被索引为c(如果c不在您的干扰词列表中,稍后会在噪声词列表中查看更多信息),但C#被索引为C#(在SQL 2005和在Win2003上运行的SQL 2000中,无论C或c是否为在你的噪音词清单中)。不仅C#存储为C#,而且任何大写字母后跟#。相反,c ++(以及任何其他小写字母后跟++)被索引为c(无论c是否在您的干扰词列表中)。

答案 1 :(得分:1)

引用一个关于索引服务查询语言的重复帮助页面:

  

要在查询中使用特殊处理的字符,例如&,|,^,#,@,$,(,),请将查询括在引号(“)中。

据我所知,MSSQL中的全文搜索也是由索引服务完成的,所以这可能有所帮助。