我的任务是在一个新的应用程序上创建一个“google-esque”搜索机制,我用一个存储过程打了一个墙,用于在SQL服务器数据库中运行实际的搜索
本质上,该过程是从用户输入中获取的字符串中传递的,然后使用以下替换将其解析为contains语句。
SELECT @SearchString = '"'+ REPLACE(REPLACE(@SearchKeyword,'"',''), ' ', '" AND "') +'"'
除非@SearchKeyword变量包含一个停用词,否则这很有用,此时,将此作为链接AND语句的一部分包含在一个没有找到结果的错误中。
(例如,使用“Something Somewhere”搜索用户会返回正确的结果集,但由于未包含在全文索引目录中,Something of Somewhere将不返回任何内容。)
我知道我可以从停止列表中删除所有条目的nuke-from-orbit方法,但理想情况下我想简单地将原始替换修改为不链接到停止列表中包含的语句中。
不幸的是,这让我陷入了知识的边缘,我找不到从哪里获取这些信息,以便将其用于替换目的。
我是在正确的轨道上,还是删除停止列表(虽然凌乱)是最好的解决方案?
答案 0 :(得分:2)
找到了答案,因此将其留待参考。
您可以通过将文本传递到sys.dm_fts_parser来识别输入中的哪些单词是默认停用词
DECLARE @Keywords VARCHAR(200)
SET @Keywords = '"Web Designer"'
SELECT *
FROM sys.dm_fts_parser(@Keywords, 1033, 0, 0)
WHERE special_term <> 'Noise Word' AND display_term IS NOT NULL
答案 1 :(得分:0)
手动删除所有停用词,而不是最好的解决方案!