【问题标题】:Searching text using CONTAINS使用 CONTAINS 搜索文本
【发布时间】:2018-06-14 13:31:28
【问题描述】:

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

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

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

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

我知道如何使用 LIKE 来做到这一点,但我更喜欢 CONTAINS

【问题讨论】:

  • 根据文档,CONTAINS 关键字与 LIKE 关键字的作用不同。它只是确定关键字字符串是否包含在要检查的字符串中。如果存在,则返回 true。您很可能需要使用 LIKE 来检查它是否在字符串的开头。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2011-06-11
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多