当前位置:  开发笔记 > 数据库 > 正文

在SQL Server索引中搜索单词

如何解决《在SQLServer索引中搜索单词》经验,为你挑选了1个好方法。

我需要在全文搜索和索引搜索之间进行一些操作:
我想在我的表的一列中搜索文本(如果这很重要,也可能在列上有一个索引).

问题是,我想在列中搜索单词,但我不想匹配部分.

例如,我的专栏可能包含公司名称:
Mighty Muck Miller and Partners Inc.
Boy&Butter Breakfast公司

现在,如果我搜索" 米勒 ",我想找到第一行.但是,如果我搜索" iller ",我不想找到它,因为没有任何词以"iller"开头.搜索" 休息 "应该找到" 男孩和黄油早餐公司 ",但是,因为一个词以" 休息 " 开头.

所以,如果我尝试使用

WHERE BusinessName LIKE %Break%

它会找到太多的点击量.

有没有办法搜索由空格或其他分隔符分隔的单词?

(LINQ将是最好的,纯SQL也会这样做)

重要提示:空间远不是唯一的分隔符!斜线,冒号,圆点,所有非字母数字字符都应该考虑到这一点!



1> joelhardi..:

您的单词分隔符将很多:空格,制表符,行首,括号,句点,逗号,感叹号/问号等.因此,一个非常简单的解决方案是在WHERE子句中使用正则表达式.(而且它可以比你想到的每个可能的分隔符OR更高效.)

既然你提到了LINQ,这里有一篇文章描述了如何用SQL Server进行高效的正则表达式查询.

就性能而言,像这样复杂的WHERE子句总是会引发一个红旗,因此我绝对建议您根据最终结果进行基准测试,您可能决定为该列构建搜索索引.

编辑:看到你编辑了你的问题.在编写正则表达式时,很容易让它使用任何非孤立字符作为分隔符,即[^ 0-9a-zA-Z],或者对于任何非单词字符使用\ W,对于任何单词边界使用\ b\B表示任何非字边界.或者,不是匹配分隔符,只匹配任何单词,即\ w +.这是使用SQL Server进行正则表达式搜索的另一个例子(比你需要的更复杂).

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有