微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在子句中使用两列定义核心Oracle文本

如何解决如何在子句中使用两列定义核心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

有人建议帮助我解决这个问题吗?

解决方法

我终于设法解决了。

关于:

  1. 创建变量:topic varchar(525);
  2. 存储列值:topic:= replace(replace(replace(ql.title,'?','{?}'),')','{)}'),'(','{( }');
  3. 并在CONTAINS子句中调用它:FROM txt_search_docs WHERE CONTAINS(txt,'DEFINESCORE((''|| topics ||''),OCCURRENCE)',1)> 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。