Oracle Text 的奇怪行为

Weird behavior of Oracle Text

我在使用 Oracle Text 时遇到了一个奇怪的行为。 我创建了以下 table:

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

并使用以下数据填充 table:

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 正确 returns

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

但是,如果我 运行

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

它returns

no rows selected

而不是返回完全相同的结果。

因为分数太低:

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

是停用词,这意味着它们与文本不相关 他们可能根本没有编入索引 您可以编辑停用词列表并删除要编入索引的词