oracle中的Like vs Contains()之间的搜索条件差异

时间:2011-04-18 09:17:34

标签: sql oracle

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

id     name
1      narsi reddy
2      narei sia

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

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

最后我明白,就像搜索整个文档或段落一样,但是包含的是单词。

那么如何获得所需的输出?

2 个答案:

答案 0 :(得分:25)

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

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

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

答案 1 :(得分:3)

我认为您的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'之前。