暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Oracle文本] 得分 (1) 并包含

askTom 2018-08-29
493

问题描述

嘿AskTom,

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根据搜索词在文本中的接近程度对文本进行评分。它们之间的其他字符越少,分数越高。

以下搜索包括 “红色” 或 “汽车” 的行,其中包括两个排名更高的行。它还显示了分数,并包含了对红色和汽车的近乎搜索。

第三个分数和包含与第一个相同。我只是选择这些来显示这些值:

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论