Oracle10g Oracle文本:如何不计算部分查询以进行评分?
我有一个使用Oracle文本索引的多列数据存储,我正在使用Contains关键字运行查询。Oracle10g Oracle文本:如何不计算部分查询以进行评分?,oracle10g,scoring,oracle-text,weighting,Oracle10g,Scoring,Oracle Text,Weighting,我有一个使用Oracle文本索引的多列数据存储,我正在使用Contains关键字运行查询。 要对不同的列进行不同的加权,我将按照以下步骤进行 如果用户搜索“恐怖”,则向oracle发出的查询如下所示: WHERE CONTAINS(indexname, '((horrible WITHIN column1) * 3) OR ((horrible WITHIN column2) * 2))') > 1 但要添加一个也被索引的类别过滤器,我需要执行以下操作: WHERE CO
要对不同的列进行不同的加权,我将按照以下步骤进行 如果用户搜索“恐怖”,则向oracle发出的查询如下所示:
WHERE CONTAINS(indexname,
'((horrible WITHIN column1) * 3)
OR ((horrible WITHIN column2) * 2))') > 1
但要添加一个也被索引的类别过滤器,我需要执行以下操作:
WHERE CONTAINS(indexname,
'((horrible WITHIN Column1) * 3)
OR ((horrible WITHIN Column2) * 2))
AND (movie WITHIN CategoryColumn)', 1) > 1
这是按类别过滤的,但这完全搞乱了评分,因为Oracle文本将从AND关键字的任何一侧获得最低分数。
相反,我想指示oracle忽略我的和的右侧
有没有办法让评分忽略查询的这一特定部分
基本上,我想根据
(horrible WITHIN Column1) * 3
OR (horrible WITHIN Column2) * 2)
但是我想根据你的选择
'((horrible WITHIN Column1) * 3)
OR ((horrible WITHIN Column2) * 2))
AND (movie WITHIN CategoryColumn)'
提到
指定应如何合并或运算符的子元素的分数
在Oracle文档中,在secion中,但示例不多
在这种情况下,使用可能更简单(如果可行),例如:
其中包含(indexname,
'
(第1栏中的恐怖片)和(分类栏中的电影)
(第2栏中的恐怖片)和(分类栏中的电影)
')>0;
这样,您就不需要分配权重,因为从更宽松的查询中获得的分数在顺序上永远不会超过前一个查询。这里提到了
指定应如何合并或运算符的子元素的分数
在Oracle文档中,在secion中,但示例不多
在这种情况下,使用可能更简单(如果可行),例如:
其中包含(indexname,
'
(第1栏中的恐怖片)和(分类栏中的电影)
(第2栏中的恐怖片)和(分类栏中的电影)
')>0;
这样,您就不需要分配权重,因为从更宽松的查询中获得的分数在顺序上永远不会超过前一个
where CONTAINS (indexname,
'<query>
<textquery lang="ENGLISH" grammar="CONTEXT">
<progression>
<seq>(horrible WITHIN Column1) AND (movie WITHIN CategoryColumn)</seq>
<seq>(horrible WITHIN Column2) AND (movie WITHIN CategoryColumn)</seq>
</progression>
</textquery>
<score datatype="INTEGER" algorithm="COUNT"/>
</query>')>0;