【问题标题】:MSSql full-text search for words abbreviated with dotsMSSql全文搜索点缩写词
【发布时间】: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


【解决方案1】:

开箱即用,它可能不适用于 SQL 2005。

我记得,对于字符串“S.E.N.S Productions”,SQL 2005 FTS(全文搜索)分词器将忽略标点符号,并将字符串分成单个字母 (S E N S) 和单词“Productions”。默认情况下,单个字母是干扰词,因此不会包含在索引中。

你可以做几件事:

  1. 编辑干扰词列表并删除单个字母并重建索引
  2. 升级到更高版本的 SQL,因为断字行为发生变化以正确返回 2008 年的结果。

【讨论】:

  • 感谢您为我指明了正确的方向。我确实查看了干扰词列表,而不是注意单个字母。我知道现在到底是什么问题。我处理的表中有超过 800 万行。因此,我会在休息时间尝试您的建议并发布结果。
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多