开发者社区> 问答> 正文

使SQL Server索引变小

我们在一个项目中使用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,重新生成了索引,然后尝试了搜索。

展开
收起
心有灵_夕 2019-12-28 22:55:51 907 0
1 条回答
写回答
取消 提交回答
  • 您可以将CONTAINS(或CONTAINSTABLE)与简单的where条件结合使用:

    从电影的内容中选择*(标题,““终结者2”“)和标题,例如'%Terminator 2%'

    当CONTAINS找到所有终结者时,哪里将消除“终结者1”。

    当然,发动机足够聪明,可以以CONTAINS(非类似条件)启动。

    2019-12-28 22:56:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载