Oracle “装订甲骨文”;近;相同句子的运算符
我有一个存储多个句子的段落的专栏,我正在使用“Near”语句寻找正确的记录。然而,是否有可能将仅查找同一句子中单词的near语句绑定起来 例如: 段落 “一位老人在皇家医院死于冠状病毒 霍巴特医院。它紧跟着一位80多岁的妇女的死亡 周一早上在伯尼的西北地区医院 使全国死亡人数达到19人。” indextype为ctxsys.context 挑选 分数(1) 从…起 tbl 哪里 包含(第, '接近(冠状病毒,死亡),20,假',1)>0 我想要的结果是什么都没有,因为这两个词来自不同的句子。然而,现在它将返回一个正数,因为两个单词之间的间隔不到20个单词 你能告诉我怎么做吗Oracle “装订甲骨文”;近;相同句子的运算符,oracle,oracle-text,Oracle,Oracle Text,我有一个存储多个句子的段落的专栏,我正在使用“Near”语句寻找正确的记录。然而,是否有可能将仅查找同一句子中单词的near语句绑定起来 例如: 段落 “一位老人在皇家医院死于冠状病毒 霍巴特医院。它紧跟着一位80多岁的妇女的死亡 周一早上在伯尼的西北地区医院 使全国死亡人数达到19人。” indextype为ctxsys.context 挑选 分数(1) 从…起 tbl 哪里 包含(第, '接近(冠状病毒,死亡),20,假',1)>0 我想要的结果是什么都没有,因为这两个词来自不同的句子。然而
提前谢谢 查询应如下所示:
select score(1)
from tbl
where contains(Paragraph, 'Near (coronavirus, death),20,false)
WITHIN SENTENCE',1) > 0
;
create index ctxidx on tbl(Paragraph)
indextype is ctxsys.context
-- parameters(' ... ')
;
即-在操作符中使用
请注意,您必须告诉索引首先识别句子。即:如果使用以下语句创建索引:
select score(1)
from tbl
where contains(Paragraph, 'Near (coronavirus, death),20,false)
WITHIN SENTENCE',1) > 0
;
create index ctxidx on tbl(Paragraph)
indextype is ctxsys.context
-- parameters(' ... ')
;
如果参数
(如果您使用了该子句)没有说明任何有关“句子”的内容,那么如果您尝试上面的查询,您将得到一个错误-类似于
DRG-10837: section sentence does not exist
首先,您必须定义句子的“特殊”部分:
begin
ctx_ddl.create_section_group('my_section_group', 'AUTO_SECTION_GROUP');
ctx_ddl.add_special_section('my_section_group', 'SENTENCE');
end;
/
有了这个:
drop index ctxidx;
create index ctxidx on tbl(Paragraph)
indextype is ctxsys.context
parameters ('section group my_section_group')
;
现在,您可以成功运行此答案顶部的查询了。嗨,Mathguy,谢谢您的帮助。但是,我在尝试创建节组时遇到ORA-06550“必须声明CTX_DDL”。我错过了什么吗?@ELeung-使用Oracle文本的用户(可能就是你)必须在CTXSYS.CTX_DDL
包上获得execute
权限。如果您有DBA,请与他或她交谈。如果您是自己的DBA,请阅读Oracle文本文档;这是创建Oracle文本用户(即定期使用Oracle文本的数据库用户)时必须完成的第一件事情之一。Thx Mathguy!我将与我的DBA核实。:)@ELeung-将您的DBA指向文档(下面的链接)-有几个包,他必须授予您execute
特权。(请确保找到与Oracle数据库版本相同的文档;这是我使用的12.1版文档)。嗨,Mathguy,由于新冠病毒19,我还在等待我的DBA回复我。然而,在等待的过程中,我使用了老派的愚蠢风格,用50个虚词替换了所有句号(.)。“Z.”。(这会导致两句话相隔50个单词,会不会对分数造成影响?非常感谢!