问题描述
嘿AskTom,
Oracle文本的文档非常差,所以我有一个问题: 最好使用CONTAINS() 子句来找到某个结果,还是我们应该为这个运算符使用score(1)?
我的意思是我们对score = 50感兴趣的情况:
是否
Oracle文本的文档非常差,所以我有一个问题: 最好使用CONTAINS() 子句来找到某个结果,还是我们应该为这个运算符使用score(1)?
我的意思是我们对score = 50感兴趣的情况:
Select CAR, SCORE(1) from Car_Table where contains() = 50
是否
Select CAR, SCORE(1) from Car_Table where contains() > 0 and SCORE(1) = 50
专家解答
你把你的搜索条件放在contains中。分数对该行与这些标准的匹配程度进行排名。
所以你使用contains来查找某些行。然后对输出进行评分。分数是你的包含谓词的简写。这样可以节省您重复 (可能是复杂的) 标准。
contains的第三个参数是一个标签。在score中使用此标签以获取包含的结果。
例如,ACCUM运算符查找包含至少一个列出的术语的条目。它匹配的术语越多,它的得分就越高。
NEAR根据搜索词在文本中的接近程度对文本进行评分。它们之间的其他字符越少,分数越高。
以下搜索包括 “红色” 或 “汽车” 的行,其中包括两个排名更高的行。它还显示了分数,并包含了对红色和汽车的近乎搜索。
第三个分数和包含与第一个相同。我只是选择这些来显示这些值:
在文档中有更多的例子:
https://docs.oracle.com/en/database/oracle/oracle-database/18/ccapp/querying-with-oracle-text.html#GUID-13F9B749-125B-40FD-9AFD-A636597447D0
https://docs.oracle.com/en/database/oracle/oracle-database/18/ccref/oracle-text-CONTAINS-query-operators.html#GUID-6410B783-FC9A-4C99-B3AF-9E0349AA43D1
所以你使用contains来查找某些行。然后对输出进行评分。分数是你的包含谓词的简写。这样可以节省您重复 (可能是复杂的) 标准。
contains的第三个参数是一个标签。在score中使用此标签以获取包含的结果。
例如,ACCUM运算符查找包含至少一个列出的术语的条目。它匹配的术语越多,它的得分就越高。
NEAR根据搜索词在文本中的接近程度对文本进行评分。它们之间的其他字符越少,分数越高。
以下搜索包括 “红色” 或 “汽车” 的行,其中包括两个排名更高的行。它还显示了分数,并包含了对红色和汽车的近乎搜索。
第三个分数和包含与第一个相同。我只是选择这些来显示这些值:
create table cars (
car_name varchar2(20) not null
);
insert into cars values ('Fast red car');
insert into cars values ('Slow car');
insert into cars values ('Red stripy car');
insert into cars values ('Red van');
commit;
create index text_i on cars ( car_name ) indextype is ctxsys.context;
select c.*,
score( 2 ), contains ( car_name, 'red NEAR car', 2 ),
score( 3 ), contains ( car_name, 'red ACCUM car', 3 )
from cars c
where contains ( car_name, 'red ACCUM car', 1 ) > 0
order by score ( 1 ) desc;
CAR_NAME SCORE(2) CONTAINS(CAR_NAME,'REDNEARCAR',2) SCORE(3) CONTAINS(CAR_NAME,'REDACCUMCAR',3)
Red stripy car 14 14 52 52
Fast red car 14 14 52 52
Red van 0 0 2 2
Slow car 0 0 2 2
在文档中有更多的例子:
https://docs.oracle.com/en/database/oracle/oracle-database/18/ccapp/querying-with-oracle-text.html#GUID-13F9B749-125B-40FD-9AFD-A636597447D0
https://docs.oracle.com/en/database/oracle/oracle-database/18/ccref/oracle-text-CONTAINS-query-operators.html#GUID-6410B783-FC9A-4C99-B3AF-9E0349AA43D1
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




