使用 CONTAINS 搜索文本

Searching text using CONTAINS

使用 CONTAINS,我正在搜索单词“text\”后跟任何字符串:

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

但是,此查询 returns 会命中“TEXT”字符串之前的文本;例如,这是一个错误命中:'there is no text available'.

正在寻找一种方法来获得像“TEXT\path\...”这样的点击,而不是“dir\TEXT\path\..”。

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

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

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