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

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

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

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

我相信#是一个特殊的字母,那么如何让FREETEXT能够正确地处理上面的查询呢?

有帮助吗?

解决方案

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

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

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

编辑:我还发现 此信息:

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top