我有这个代码:
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这个词
。有人建议帮助我解决这个问题吗?
我终于设法解决了它。
它是关于:
- 创建一个变量:主题瓦尔查尔(525);
- 存储列值: 主题 := replace(replace(ql.title, '?', '{?}'), ')', '{)}'), '(', '{(}');
- 并在 CONTAINS 子句中调用它之后:从 txt_search_docs WHERE CONTAINS(txt, 'DEFINESCORE(('''||主题||'''), 发生)', 1)> 0