2014-02-10 1 views
5

У меня странное поведение по немецкой фамилии «Варсоенке».Текст Oracle: странное поведение функции оценки

Проверьте это:

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).

Для других фамилий это прекрасно и понятно. Но для этого ...

У меня догадалось, что это из-за настроек немецкой базы данных, например. «Война так ...», но эта идея довольно странная, и до сих пор неясно, почему «Warsoen» работает тогда.

Любые идеи?

EDIT

я узнал гораздо больше фамилий, которые не работают, как описано выше. И я до сих пор не вижу никаких возможных объяснений этого ...

+1

Не могли бы вы разместить свое значение «NLS_LANG»? Я попытался с вашим DDL и Query, я получил его как 1 и 1 .. Вы можете видеть в [SQL Fiddle] (http://sqlfiddle.com/#!4/d31f4/1) –

+0

NLS_LANGUAGE: GERMAN, версия DB: 11.2.0.2.0. Я вижу, он работает в sqlfiddle, но на моем сервере это не ... – smnbbrv

ответ

6

Просто если кто-то имеет такую ​​же проблему, проблема была в постановке DEFAULT_LEXER:

BASE_LETTER  | YES 
ALTERNATE_SPELLING | GERMAN 

Вот что мы получили после расследования:

Чтобы изменить поведение, необходимо изменить один из двух параметров, или дополнительный параметр OVERRIDE_BASE_LETTER должен быть установлен в true (согласно docs).

 Смежные вопросы

  • Нет связанных вопросов^_^