Странное поведение 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

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

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

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

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

Другие вопросы по тегам