Oracle全文,CONTAINS()的语法

gfy*_*ytd 1 oracle full-text-search

contains(columnname, 'ABC')=0
Run Code Online (Sandbox Code Playgroud)

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

contains(columnname, 'ABC and XYZ')=0
contains(columnname, 'ABC or XYZ')=0
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

A.B*_*ade 5

根据oracle 文档,contains功能:

返回所选每行的相关性分数

如果你要求

contains(columnname, 'ABC')=0
Run Code Online (Sandbox Code Playgroud)

你实际上要求的分数0意味着:列名不包含'ABC'

根据文件:

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

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

所以如果你要求:

contains(columnname, 'ABC and XYZ')=0
Run Code Online (Sandbox Code Playgroud)

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

同样的事情 or-

contains(columnname, 'ABC or XYZ')=0
Run Code Online (Sandbox Code Playgroud)

只有当'ABC' 'XYZ'都有0函数的分数才会返回0,所以你实际上要求:columnname不包含'ABC'和'XYZ'(两者都有).

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