Oracle文本:得分函数的奇怪行为

时间:2014-02-10 15:54:16

标签: 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"或"战争"它返回得分2.如果我输入" Warsoen"它的工作方式就像我理解的那样它应该并返回1.

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

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

我猜这是因为德国的数据库设置,例如"战争如此......"但这个想法很奇怪,但仍然不清楚为什么" Warsoen"然后工作。

有什么想法吗?

修改

我发现了更多不像上述那样工作的姓氏。我仍然没有看到任何可能的解释......

1 个答案:

答案 0 :(得分:4)

如果有人遇到同样的问题,问题在于设置DEFAULT_LEXER:

BASE_LETTER        | YES
ALTERNATE_SPELLING | GERMAN

这是我们调查后收到的:

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