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
是停用词,这意味着它们与文本不相关
他们可能根本没有编入索引
您可以编辑停用词列表并删除要编入索引的词
我在使用 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
是停用词,这意味着它们与文本不相关 他们可能根本没有编入索引 您可以编辑停用词列表并删除要编入索引的词