Странное поведение Oracle Text

Я получаю странное поведение, используя Oracle Text. Я создал следующую таблицу:

CREATE TABLE TEST_OTEXT_TABLE (id NUMBER PRIMARY KEY, text VARCHAR2(200));

и заполнил таблицу следующими данными:

1   California is a state in the US.
2   Paris is a city in France.
3   France is in Europe.
4   Italy is a city in Europe.

Затем я создал индекс:

CREATE INDEX TEST_OTEXT_INDEX ON TEST_OTEXT_TABLE(text)
INDEXTYPE IS CTXSYS.CONTEXT 
parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

EXEC CTX_DDL.SYNC_INDEX('TEST_OTEXT_INDEX', '2M');

Если я побегу

select id, score(1) from TEST_OTEXT_TABLE WHERE CONTAINS (text, 'is a city', 1) > 0 ;

все работает нормально, так как Oracle Text правильно возвращает

    ID   SCORE(1)
---------- ----------
     2          4
     4          4

Однако, если я бегу

select id, score(1) from TEST_OTEXT_TABLE WHERE CONTAINS (text, 'is a', 1) > 0 ;

он возвращается

no rows selected

вместо того, чтобы возвращать тот же результат.


person Claudio    schedule 31.03.2016    source источник


Ответы (2)


Это потому, что оценка слишком низкая:

select id, score(1) from TEST_OTEXT_TABLE WHERE CONTAINS (text, 'is a', 1) = 0 ;

Row   ID  SCORE
1     1   0
2     2   0
3     3   0
4     4   0

Если вы используете город, оценка равна 4, и отображаются результаты:

select id, score(1) from TEST_OTEXT_TABLE WHERE CONTAINS (text, 'city', 1) > 0 ;

Дополнительная информация о счете: https://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/csql8.htm

Здесь вы можете прочитать, как работает алгоритм оценки: https://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/ascore2.htm

person massie    schedule 31.03.2016
comment
Почему оценка равна 0, даже если строка содержит искомое слово (т.е. is a)? И почему оценка выше, если я ищу a city? - person Claudio; 31.03.2016
comment
Понятно: такие термины, как is и a, являются шумовыми терминами и поэтому имеют низкий балл (docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/). - person Claudio; 31.03.2016

это стоп-слова, это означает, что они не имеют отношения к тексту они, скорее всего, вообще не индексируются вы можете редактировать список стоп-слов и удалять слова, которые вы хотите индексировать

person Beda Hammerschmidt    schedule 13.07.2017