如何解决如何在子句中使用两列定义核心Oracle文本
declare
sName varchar(25);
iRank number := 0;
sDesc varchar(510);
cursor q is
SELECT *
FROM trec_topics ORDER BY num;
BEGIN
for ql in q
loop
sDesc := replace(replace(replace(ql.title,'?','{?}'),')','{)}'),'(','{(}');
--dbms_output.put_line(ql.num||'-'||sDesc);
declare
cursor c is
SELECT /*+ FirsT_ROWS(100) */ docno,CASE
WHEN score(10) >= score(20) THEN score(10)
ELSE score(20)
END AS score
FROM txt_search_docs WHERE CONTAINS(txt,'DEFINEscore(ql.title,OCCURRENCE)',10) > 0 OR
CONTAINS(txt,'DEFINEscore(sDesc,20) > 0
order by score desc;
begin
iRank := 1;
for c1 in c
loop
dbms_output.put_line(ql.num||' Q0 '||c1.docno||' '||lpad(iRank,3,'0')||' '||lpad(c1.score,2,'0')||' myUser');
iRank := iRank + 1;
exit when c%rowcount = 100;
end loop;
end;
end loop;
end;
如您所见,我正在两个不同的表上进行选择,但是,我需要更改标准评分,因为它的效果不佳。我正在尝试使用具有这种'DEFINEscore(query_term,scoring_expression)'格式的DEFINEscore子句。
如何在此子句中调用表列?也就是说,我需要调用列而不是“ query_term”,因为有多个文档可以进行搜索。因为我打电话给他的方式,他正在寻找术语ql.title
有人建议帮助我解决这个问题吗?
解决方法
我终于设法解决了。
关于:
- 创建变量:topic varchar(525);
- 存储列值:topic:= replace(replace(replace(ql.title,'?','{?}'),')','{)}'),'(','{( }');
- 并在CONTAINS子句中调用它:FROM txt_search_docs WHERE CONTAINS(txt,'DEFINESCORE((''|| topics ||''),OCCURRENCE)',1)> 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。