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

例如,我的查询就像下面使用SQL Server 2005:

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

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

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

我相信#是一封特殊的信件,那么如何让FREETEXT正确地用于上述查询?

0
额外 编辑
意见: 3
只是猜测,但“c \\#”怎么样?
额外 作者 Ryan Fox,

2 答案

引用关于索引服务查询语言的大量复制的帮助页面:

To use specially treated characters such as &, |, ^, #, @, $, (, ), in a query, enclose your query in quotation marks (?).

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

0
额外

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

这样做后,在本地进行测试并重建索引,并获得结果!

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

编辑:我还发现这些信息

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