【发布时间】:2009-11-18 16:57:49
【问题描述】:
我正在尝试改进我们的短语搜索功能(在我们的例子中是电影标题),目前正在研究 SQL Server 2008 全文搜索,它提供了一些我们想要的功能:
- 词干提取(例如,“saw”也表示“see”、“seen”等)
- 同义词(例如“6”与“VI”同义)
然而,排名算法似乎有问题,将FREETEXTTABLE 与搜索词一起使用并提取RANK 字段。例如,当用户输入“saw”时,如果没有目录,我们得到的结果是:
RANK | Title
---------------------------------------------------------------------
180 | The Exorcist: The version you've never seen
180 | Saw IV
180 | Saw V
180 | Anybody Here Seen Jeannie?
180 | Seeing Red
所有这些都具有相同的排名,尽管人们很清楚第二个和第三个条目比其他词干匹配更好。
类似地输入“moon”会得到以下结果:
RANK | Title
---------------------------------------------------------------------
144 | Pink Floyd - The Dark Side of the Moon
144 | Fly Me To The Moon 3D
144 | Twilight: New Moon
144 | Moon
虽然没有词干匹配,但人们会清楚“月亮”的最佳匹配是“月亮”,而不是仅包含它作为标题一部分的较长标题,但 FTS 对它们进行平等排名.
我猜这可能与 SQL Server 对结果进行排序的方式有关,它将词干词和同义词与原始术语同等权重,并考虑了用于排名的词密度,这对于长段落来说会很好文本,但并不真正适用于像这样的短语。所以我开始觉得 FTS 不适合这份工作,很遗憾。
我真的不想重新发明轮子,那么是否有任何现有的搜索解决方案可以用于标题并提供良好的排名以及词干/词库功能?如果它有一个拼写检查器来实现像谷歌这样的“你的意思是......”功能也很好,所以“saww”会被更正为“saw”,“mon”会被更正为“moon”,等等。
【问题讨论】:
标签: sql-server-2008 full-text-search