oracle文本使用accum和Query重写来定义核心

أحم*_*لحة 5 sql oracle oracle-text

我正在使用Oracle文本搜索句子语料库我希望得分只计算离散事件,

示例:我的查询是 ( dog cat table ) 如果它找到术语"狗",它必须计数1,即使该句子有多个"狗"术语.如果它发现"狗猫"它必须数2 ...等

我使用了这个查询,但如果找到两个术语,它会给我51个.我需要累积离散事件.所以我想要覆盖Oracle Text评分算法的行为.

   select /*+ FIRST_ROWS(1)*/ sentence_id
           ,score(1) as sc
           , isn 
           ,sentence_length 
   from       plag_docsentences 
   where contains(PROCESSED_TEXT,'DEFINESCORE(dog, DISCRETE*.01)
                                ,DEFINESCORE(cat, DISCRETE*.01)'
                    ,1)>0 
order by score(1) desc
Run Code Online (Sandbox Code Playgroud)

أحم*_*لحة 1

好的,我解决了这个问题。

假设我找到 3 项中的 2 项,得分将为 67,这意味着 ( 2/3=67 ) 这是 oracle 文本评分算法的默认行为。所以我推导了一个方程来查找出现次数(即在语料库句子中找到的查询中的术语数量),如下所示:

x/query_length = 分数/100

然后

x=查询长度 * 分数/100

这将找到查询和语料库查询之间匹配单词的数量

我希望这对IR研究人员有所帮助。