Oracle Text的奇怪行为

时间:2016-03-31 07:16:38

标签: oracle 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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这是因为分数太低:

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