26

例如,我的查询使用 SQL Server 2005 如下所示:

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

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

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

我相信 # 是一个特殊的字母,那么如何让 FREETEXT 对上述查询正常工作?

4

2 回答 2

14

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

在这样做并重建索引后在本地测试它,我得到了结果!

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

编辑:我还发现了这些信息

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

于 2008-08-04T06:39:40.003 回答
1

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

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

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

于 2008-08-04T06:10:16.600 回答