如何使用两列与子句定义分数预言机文本



我有这个代码:

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, OCCURRENCE)', 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. 创建一个变量:主题瓦尔查尔(525);
  2. 存储列值: 主题 := replace(replace(ql.title,
  3. '?', '{?}'), ')', '{)}'), '(', '{(}');
  4. 并在 CONTAINS 子句中调用它之后:从 txt_search_docs WHERE CONTAINS(txt, 'DEFINESCORE(('''||主题||'''), 发生)', 1)> 0

最新更新