我需要在全文搜索和索引搜索之间进行一些操作:
我想在我的表的一列中搜索文本(如果这很重要,也可能在列上有一个索引).
问题是,我想在列中搜索单词,但我不想匹配部分.
例如,我的专栏可能包含公司名称:
Mighty Muck Miller and Partners Inc.
Boy&Butter Breakfast公司
现在,如果我搜索" 米勒 ",我想找到第一行.但是,如果我搜索" iller ",我不想找到它,因为没有任何词以"iller"开头.搜索" 休息 "应该找到" 男孩和黄油早餐公司 ",但是,因为一个词以" 休息 " 开头.
所以,如果我尝试使用
WHERE BusinessName LIKE %Break%
它会找到太多的点击量.
有没有办法搜索由空格或其他分隔符分隔的单词?
(LINQ将是最好的,纯SQL也会这样做)
重要提示:空间远不是唯一的分隔符!斜线,冒号,圆点,所有非字母数字字符都应该考虑到这一点!
您的单词分隔符将很多:空格,制表符,行首,括号,句点,逗号,感叹号/问号等.因此,一个非常简单的解决方案是在WHERE子句中使用正则表达式.(而且它可以比你想到的每个可能的分隔符OR更高效.)
既然你提到了LINQ,这里有一篇文章描述了如何用SQL Server进行高效的正则表达式查询.
就性能而言,像这样复杂的WHERE子句总是会引发一个红旗,因此我绝对建议您根据最终结果进行基准测试,您可能决定为该列构建搜索索引.
编辑:看到你编辑了你的问题.在编写正则表达式时,很容易让它使用任何非孤立字符作为分隔符,即[^ 0-9a-zA-Z],或者对于任何非单词字符使用\ W,对于任何单词边界使用\ b\B表示任何非字边界.或者,不是匹配分隔符,只匹配任何单词,即\ w +.这是使用SQL Server进行正则表达式搜索的另一个例子(比你需要的更复杂).