Oracle 文本 : strange behaviour of score function

原文 标签 oracle oracle-text

我对德国姓氏“Warsoenke”有一种奇怪的行为。

看一下这个:

create table test_warsoe
as
select 'Mister Warsoenke ABC-12' name
from dual;

create index test_warsoe_index on test_warsoe(name) indextype is ctxsys.context;

select name,
       score(1) as rating_warsoe,
       score(2) as rating_warsoen
from test_warsoe
where contains(name,'definescore(Warsoe%,occurrence)',1) > 0
   or contains(name,'definescore(Warsoen%,occurrence)',2) > 0;

输出是:
Mister Warsoenke ABC-12  |  2  |  1

我不明白为什么?如果我输入“Warsoe”或“War”,它会返回 2 分。如果我输入“Warsoen”,它的工作原理就像我理解的那样,它应该并返回 1。

如果我不使用 definescore它的工作方向相同,只是显示不同的数字(27 和 13)。

对于其他姓氏,它完美而清晰。但是对于这个...

我猜这是因为德国的数据库设置,例如“War so e...”但是这个想法很奇怪,仍然不清楚为什么“Warsoen”当时有效。

有任何想法吗?

编辑

我发现了更多与上述不同的姓氏。我仍然没有看到任何可能的解释......

最佳答案

如果有人有同样的问题,问题出在 DEFAULT_LEXER 的设置上:

BASE_LETTER        | YES
ALTERNATE_SPELLING | GERMAN

这是我们经过调查后得到的:

要更改行为,必须更改两个参数之一,或者必须将附加参数 OVERRIDE_BASE_LETTER 设置为 true(根据 docs )。

关于Oracle 文本 : strange behaviour of score function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681781/

相关文章:

sql - 不是经理的员工列表

sql - 使用花括号和通配符转义 Oracle 文本

oracle - 不使用 exp 或 expdp 的简单 oracle 备份

oracle - 创建新表时如何默认具有其他表列值的列?

oracle - 使用带有Oracle驱动程序的数据库/SQL包时,LastInsertId返回0

java - Oracle Text 为类似 Google 的搜索栏优化查询

oracle - 如何在 Oracle CONTAINS 运算符中解决文本查询的 4000 个字符限制?

oracle - 设置 Oracle Text 以索引 Oracle 表中多列的值

sql - 姓名查询数据库建议

oracle - 用于函数参数的自定义惰性求值/短路的语法