Oracle全文,CONTAINS()的语法

时间:2012-10-31 03:14:15

标签: oracle full-text-search

contains(columnname, 'ABC')=0

这意味着搜索不包含单词'ABC'的数据

contains(columnname, 'ABC and XYZ')=0
contains(columnname, 'ABC or XYZ')=0

这两个sql是什么意思?我测试了它们,没有语法错误,但它们没有像我预期的那样工作,'和'看起来像'或',而'或'似乎是'和',任何人都可以帮忙解释一下吗? 在Google中找到的所有文档都包含contains()> 0,这些不是我需要的。

提前感谢。

1 个答案:

答案 0 :(得分:5)

根据oracle documentationcontains函数:

  

返回所选行的相关性分数

如果你要求

contains(columnname, 'ABC')=0

您实际上要求得分0,这意味着:列名不包含'ABC'

根据文件:

  

在AND查询中,返回的分数是最低查询字词的分数

     

在OR查询中,返回的分数是最高查询字词的分数

所以如果你要求:

contains(columnname, 'ABC and XYZ')=0

然后,如果'ABC''XYZ'得分为0,它将得分最低,这就是你从该函数得到的,所以你是实际上要求:columnname不包含'ABC'或'XYZ'(至少其中一个)。

or -

也是如此
contains(columnname, 'ABC or XYZ')=0

只有当'ABC''XYZ'得分为0时,该函数才会返回0,所以您实际上要求:columnname doesn' t包含'ABC'和'XYZ'(两者都有)。

恕我直言,这种行为是正确的,因为它符合De-Moragan's Laws