我们在一个项目中使用 SQL Server 2005。系统的用户有能力通过使用“关键词”来搜索一些对象。我们实现这一点的方法是为每个表中可能包含这些“关键字”的重要列创建一个全文目录,然后使用 CONTAINS 在该索引的搜索框中搜索用户输入的关键字。
因此,例如,假设您有 Movie 对象,并且您想让用户在文章的标题和正文中搜索关键字,那么我们将索引 Title 和 Plot 列,然后执行以下操作:
SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)
(它实际上比这更先进一点,但没有什么特别复杂的)
一些用户在他们的搜索中添加数字,例如他们想要找到“终结者 2”。这里的问题是,据我所知,默认情况下 SQL Server 不会索引短词,因此进行如下搜索:
SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')
实际上相当于这样做:
SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'
我们得到了大量的虚假结果。
有没有办法强制 SQL Server 索引小单词?最好,我宁愿只索引像 1、2、21 等这样的数字。我不知道在哪里定义索引标准,或者即使可以像那样具体。
好吧,我这样做了,从列表中删除了“干扰词”,现在行为有点不同,但仍然不是你所期望的。
不会搜索“终结者 2”(我只是在编造这个,如果我透露我们在做什么,我的雇主可能不会真的很高兴......无论如何,术语有点不同但原理相同) , 我什么也没得到,但我知道有些对象包含这两个词。
也许我做错了什么?我从 ENG、ENU 和 NEU(中性)的噪声配置中删除了所有数字 1 ... 9,重新生成索引并尝试搜索。