我们正在使用 SQL Server 2012 对立法文件进行全文索引。但是,在 2012 年似乎无法创建包含节符号 (§) 等字符的查询。
我似乎在 MSDN 上找不到说明哪些字符“不可查询”的文档。在我们的用例中,从查询中过滤掉部分符号 (§) 似乎很烦人(正如使用 sys.dm_fts_parser 解析查询时所证实的那样)。
通过实施一些配置或解决方法,这是否可以使用 SQL Server 2012 和全文搜索来实现?
我们正在使用 SQL Server 2012 对立法文件进行全文索引。但是,在 2012 年似乎无法创建包含节符号 (§) 等字符的查询。
我似乎在 MSDN 上找不到说明哪些字符“不可查询”的文档。在我们的用例中,从查询中过滤掉部分符号 (§) 似乎很烦人(正如使用 sys.dm_fts_parser 解析查询时所证实的那样)。
通过实施一些配置或解决方法,这是否可以使用 SQL Server 2012 和全文搜索来实现?
您面临的问题是 § 之类的符号在 SQL Server Full Text 中被视为分词符,就像空格一样。
A+ 解决方案是创建您自己的自定义分词器。我很难找到一个很好的例子,甚至是如何做到这一点的参考,但我相信您可以参考Windows Search 开发人员指南(查看扩展索引),因为它们是基于相同的技术构建的。
快速而肮脏的解决方案是使用 LIKE 运算符。前任:SELECT * FROM Table WHERE Column LIKE '%§123%'
我们还没有检查实现自定义分词器,我相信使用 LIKE 搜索违背了使用全文索引的目的,我认为它会妨碍性能。但是,我们发现可以配置分词器,使其实际上排除某些字符。这里解释:
http://technet.microsoft.com/en-us/library/hh231252.aspx 和这里http://technet.microsoft.com/library/cc263242.aspx
我相信这将是在 SQL Server 2012 的全文索引中制作诸如 § 之类的符号的答案。
不幸的是,这仅适用于某些语言,虽然丹麦语是受支持的语言之一,而且这是我们应该使用的语言(被索引的文档的语言是丹麦语),但我们发现语言存在严重问题在使用丹麦语作为语言时进行分析,可能起源于 SQL Server 2008/2012 中用于丹麦语的词干类。现在我们正在研究更改或禁用用于丹麦语的词干。如果可能的话,这被证明是很困难的,但这是 StackOverflow 上一个完全不同的问题。