可能的两个原因-索引可能不同步,并且
CONTAINS似乎在
LIKE匹配字符串时匹配单词。
两个字符串的示例,其中
LIKE两个都匹配,但
CONTAINS都不匹配:
create table test1(must_fix_by varchar2(4000));create index cidx_mustfixby on test1(must_fix_by) indextype is ctxsys.context;insert into test1 values('Q234567');insert into test1 values('Q2 234567');select * from test1 where must_fix_by like 'Q2%';MUST_FIX_BY-----------Q234567Q2 234567select * from test1 where contains(must_fix_by, 'Q2') > 0;no rows selected
默认情况下,
CONTEXT索引需要手动同步。您要么需要运行:
execctx_ddl.sync_index('cidx_mustfixby');,要么需要使用创建索引
on commit。
exec ctx_ddl.sync_index('cidx_mustfixby');select * from test1 where contains(must_fix_by, 'Q2') > 0;MUST_FIX_BY-----------Q2 234567
这解决了其中一个问题。但是
Q234567还是不匹配。我对Oracle
Text不太了解,甚至找不到关于其
CONTAINS工作原理的简单描述。但这似乎是基于完整的单词而不是字符串。Q2和其他字符之间需要有某种类型的单词边界,才能通过简单的
CONTAINS过滤器将其拾取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)