我们在一个项目中使用SQL Server 2005。系统的用户可以使用“关键字”搜索某些对象。我们实现此方法的方式是,为每个表中可能包含这些“关键字”的重要列创建一个全文目录,然后使用CONTAINS搜索用户在该索引的搜索框中输入的关键字。
因此,例如,假设您有Movie对象,并且想要让用户在文章的标题和正文中搜索关键字,然后我们将同时在Title和Plot列中建立索引,然后执行以下操作:
SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)
(```
实际上比这要先进一些,但没有什么复杂的东西)
一些用户在搜索中添加数字,例如,他们想找到“终结者2”。据我所知,这里的问题是,根据我所知,默认情况下,SQL Server不会索引短单词,因此进行如下搜索:
```js
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,重新生成了索引,然后尝试了搜索。
您可以将CONTAINS(或CONTAINSTABLE)与简单的where条件结合使用:
从电影的内容中选择*(标题,““终结者2”“)和标题,例如'%Terminator 2%'
当CONTAINS找到所有终结者时,哪里将消除“终结者1”。
当然,发动机足够聪明,可以以CONTAINS(非类似条件)启动。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。