我们在项目中使用SQL Server 2005.系统用户可以使用"关键字"搜索某些对象.我们实现这一点的方法是为每个表中可能包含这些"关键字"的重要列创建一个全文目录,然后使用CONTAINS搜索用户在该索引的搜索框中输入的关键字.
因此,举例来说,假设您拥有Movie对象,并且您希望让用户在文章的标题和正文中搜索关键字,然后我们将标题和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,重新生成索引,并尝试搜索.