【问题标题】:Why doesn't SQL Full Text Indexing return results for words containing #?为什么 SQL 全文索引不返回包含 # 的单词的结果?
【发布时间】:2010-09-05 06:55:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 只是猜测,但是“c\\#”怎么样?

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


【解决方案1】:

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

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

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

编辑:我还找到了this information

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多