我使用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
而不是返回相同的结果。
答案 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