我们在一个项目中使用 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 对小词建立索引?最好,我宁愿只索引numbers像 1、2、21 等。我不知道在哪里定义索引标准,或者即使有可能如此具体。
好吧,我这样做了,从列表中删除了“噪音词”,现在的行为有点不同,但仍然不是你所期望的。
搜索不会搜索“终结者 2”(我只是编造的,如果我透露我们正在做的事情,我的雇主可能不会很高兴......无论如何,术语有点不同,但原理是相同的) ,我不明白anything,但我知道有些对象包含这两个单词。
也许我做错了什么?我从 ENG、ENU 和 NEU(中性)的噪声配置中删除了所有数字 1 ... 9,重新生成索引,并尝试搜索。