【发布时间】:2011-11-15 03:17:00
【问题描述】:
我一直在努力解决以下问题:
select * from table_name where contains((field1,field2),'"S.E.N.S"');
以下是我在字段 1 中的文字: “S.E.N.S 制作”
如果我搜索“production”,我会得到结果,但不是“S.E.N.S”。
关于如何获得所需结果的任何想法?谢谢。
更新:Sql Server 版本为 2005 SP3。
更新:嗯,这很奇怪。当我将全文设置为使用 noiseENG.txt 时,我的问题中的查询工作正常。但是数据库中存储的所有内容都是土耳其语,并且所有设置都进行了相应设置,包括noiseTRK.txt。据我所知,“S.E.N.S”在土耳其语和英语中都不是一个词。我可以将其设置为 noiseENG.txt 以使其工作,但我怀疑这是否合适。谁能知道/想到 noiseTRK.txt 会闯入上述查询的原因?谢谢。
附:我已经使用未经修改的噪音文件以及土耳其噪音文件的单字母删除版本进行了测试。
【问题讨论】:
-
阅读全文搜索中的特殊字符。我认为 FTS 将任何特殊字符视为分词。
-
您使用的是哪个分词器(不是噪音文件)?英语还是土耳其语?
-
我还没有完全理解mssql的所有细节。但我按照此处描述的步骤 (support.microsoft.com/kb/908441) 在全文索引中安装了土耳其语支持。因此,当我创建全文索引时,我选择要索引的列,然后从下一列(分词器的语言)中选择土耳其语(或英语)。在此处选择土耳其语不适用于上述情况,而英语则适用。我不确定分词器和噪音文件之间的区别。
-
这就是答案。土耳其语断词器会破坏标点符号上的单词,就像我在回答中描述的那样(s en s)。英文版把这个词分成“sens”和“s.e.n.s”。分词器的规则是不同的(并且没有记录)。我编写了一个应用程序来测试它们,看看它们是如何被语言分解的。
标签: sql-server full-text-search