使用CONTAINS搜索文本

时间:2018-01-04 18:49:19

标签: sql sql-server sql-server-2008 tsql contains

使用CONTAINS,我正在搜索' text\'后跟任何字符串:

select * from table1
where CONTAINS (availableText, 'TEXT\%')

但是,此查询会返回在' TEXT'之前有文字的匹配。串;例如,这是一个错误的打击:' there is no text available'。

寻找一种方法来获得像TEXT\path\...'而不是' dir\TEXT\path\..'。

我知道如何使用LIKE执行此操作,但更喜欢使用CONTAINS

1 个答案:

答案 0 :(得分:0)

我怀疑使用CONTAINS是可行的。 CONTAINS在内部使用全文索引(一种可以想象的结构,就像一组文本的所有单词的大索引)。这就是为什么CONTAINS在大多数情况下明显快于LIKE的原因,因为它可以在全文索引中查找您查询的单词并将相应的键检索到包含该单词的文本的行中(S)。 LIKE扫描所有行(如果'%'是查询的开头)或至少是查询列的索引(如果您的查询不以通配符开头)。

在你的情况下,我建议在(n)varchar列上创建一个索引并使用LIKE,因为你正在进行基于前缀的搜索。 如果你肯定想要使用CONTAINS,你可能首先要使用该运算符,然后在该受限制的结果集上使用LIKE。