sql-server - SQL Server 在列中搜索文本

标签 sql-server full-text-search contains sql-like patindex

我对使用什么感到困惑?

基本上,我需要一个搜索字符串,可以在单个列中搜索多个短语的出现,每个输入短语用空格分隔。

所以来自用户的输入会是这样的:

"Phrase1 Phrase2 ... PhraseX"     (number of phrases can 0 to unknown!, but say < 6)

我需要用逻辑搜索:
Where 'Phrase1%' **AND** 'Phrase2%' **AND** ... 'PhraseX%'

.. 等等... 所以所有的短语都需要找到。

总是合乎逻辑的 AND

SO 速度,性能考虑在内,我是否使用:

很多
Like 'Phrase1%' and like 'Phrase2%' and like ... 'PhraseX%' ?

或使用
patindex('Phrase1%' , column) > 0 AND  patindex('Phrase2%' , column) > 0 
AND ...     patindex('PhraseX%' , column) 

或使用

添加全文搜索索引,

使用:
Where Contatins(Column, 'Phrase1*') AND Contatins(Column, 'Phrase2*') AND ... Contatins(Column, 'PhraseX*')



???

几乎太多的选择,这就是为什么我要问,这样做的最有效方法是什么......

你的智慧值得赞赏...

最佳答案

如果您正在搜索 AND,那么正确的通配符搜索将是:

Like '%Phrase1%' and like '%Phrase2%' and like ... '%PhraseX%' 

没有理由使用patindex()在这里,因为 like足够并且优化良好。优化得很好,但这种情况无法提高效率。这将需要全表扫描。而且,如果文本字段真的非常大(我的意思是至少有数千或数万个字符),性能将不会很好。

解决方案是全文搜索。您可以将其表述为:
where CONTAINS(column, 'Phrase1 AND phrase2 AND . . . ');

这里唯一的问题是您正在寻找的“短语”(似乎是单词)何时是停用词。

总之,如果您有超过几千行或您正在搜索的文本字段有超过几千个字符,那么请使用全文选项。这只是为了指导。如果您正在搜索包含 100 行的引用表并查看最多包含 100 个字符的描述字段,则 like方法应该没问题。

关于sql-server - SQL Server 在列中搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18040913/

相关文章:

sql - 使用 bool 全文搜索按相关性排序

javascript - 客户端搜索引擎优化

sql - SQL搜索包含术语

c# - 从多个表中选择最大日期

c# - 无法打开,因为是852版本,本服务器支持782及更早版本

c# - SQL 异常 : Incorrect syntax near 'Index'

java - 如何判断一个字符串是否可以生成另一个字符串

sql - 如何使列允许空或唯一序列

python - 全文搜索的各种搜索算法和性能

javascript - 删除包含星号或点的单词