【问题标题】:search criteria difference between Like vs Contains() in oracleoracle中Like vs Contains()之间的搜索条件差异
【发布时间】:2011-04-18 09:17:34
【问题描述】:

我创建了一个包含两列的表。我插入了两行。

id     name
1      narsi reddy
2      narei sia

一个是简单的数字类型,另一个是 CLOB 类型。所以我决定使用索引。我通过使用包含进行了查询。 查询:

select * from emp where contains(name,'%a%e%')>0

2      narei sia

我预计 2 会来,但没有。但是,如果我给予同样的东西,它就会得到我想要的东西。 查询:

select * from emp where name like '%a%e%'

ID                     NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
1                      (CLOB) narsi reddy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
2                      (CLOB) narei sia                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

2 rows selected

我终于明白 like 是在搜索整个文档或段落,但 contains 是在查找单词。

那么我怎样才能获得所需的输出?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    LIKE 和 CONTAINS 是根本不同的搜索方法。

    LIKE 是一个非常简单的字符串模式匹配器——它可以识别两个通配符 (%) 和 (_),它们分别匹配零个或多个或恰好一个字符。在您的情况下, %a%e% 匹配表中的两条记录 - 它查找零个或多个字符,后跟 a,后跟零个或多个字符,后跟 e,后跟零个或多个字符。它的返回值也非常简单:它要么返回“匹配”,要么返回“不匹配”——没有灰色阴影。

    CONTAINS 是一个强大的搜索工具,它使用上下文索引,它构建了一种可以使用 CONTAINS 搜索语法进行搜索的词树。它可用于搜索单个词、词的组合,并且具有自己的丰富语法,例如布尔运算符(AND、NEAR、ACCUM)。它还更强大的是,它不是返回简单的“匹配”或“不匹配”,而是返回一个“分数”,可用于按相关性顺序对结果进行排名;例如CONTAINS(col, 'dog NEAR cat') 将为这两个单词都靠得很近的文档返回更高的分数。

    【讨论】:

    • 这意味着 contains 不能像 LIKE 那样搜索。假设我有一个字符串 person name is himans 。如果我通过contains 搜索ers 我会得到空白?
    • 如果只想检测字符串中的ers,请使用likeinstr
    【解决方案2】:

    我相信您的CONTAINS 查询与“narei sia”匹配,因为模式“%a%e%”与单词“narei”匹配。它与“narsi reddy”不匹配,因为单独的单词都与模式不匹配。

    出于性能原因,我假设您想使用 CONTAINS 而不是 LIKE。我绝不是CONTAINS 查询表达式方面的专家,但我没有看到一种简单的方法来进行您想要的精确搜索,因为您正在寻找可以在同一个词或不同词中的字母,但是必须以给定的顺序发生。我认为最好将这两种技术结合起来:

    WHERE CONTAINS(name,'%a% AND %e%') > 0
      AND name LIKE '%a%e%'
    

    我认为这将允许使用文本索引来查找候选匹配项(任何包含至少一个包含“a”的单词和至少一个包含“e”的单词的内容)。然后这些将被LIKE 条件过滤,强制要求字符串中“a”在“e”之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2014-04-05
      相关资源
      最近更新 更多