Странное поведение 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
Это стоп-слова, это означает, что они не имеют релевантности для текста, который они, скорее всего, не проиндексированы, вы можете редактировать список стоп-слов и удалять слова, которые вы хотите проиндексировать