我有Oracle DB的问题 – 在物化视图上通过CONTAINS()搜索后,域索引返回零行.我看到物化视图充满了数据,我还使用过程ctx_ddl.sync_index()进行域索引同步.
什么有用:
>创建表 >插入数据 >创建域索引 > SYNC DOMAIN INDEX >通过包含找到行 – 返回行
什么不起作用:
>创建表 >插入数据 >创建物化视图 >刷新材料化视图 >在物化视图中创建域索引 >物化视图中的同步域索引 >在物质化视图中查找包含行数 – 返回零行(类似于%的工作量)
如果没有物化视图,为什么一切正常? 这是我的查询(您可以复制粘贴并在您的oracle db中尝试):
– 创建表 创建表“PCOUNTERPARTY”(“ID_COUNTERPARTY”编号(10,0),“TXT_SEARCH_FULL_NAME”NVARCHAR2(260),CONSTRAINT“PCOUNTERPARTY_PK”主键(“ID_COUNTERPARTY”));
–INSERT DATA. 插入PCOUNTERPARTY(ID_COUNTERPARTY,TXT_SEARCH_FULL_NAME)值(1184,’MARTINKO3′);
– 创建物化视图 创建物质化视图m_pcounterparty 如 选择c.ID_COUNTERPARTY,CAST(c.TXT_SEARCH_FULL_NAME AS varchar2(260 CHAR))作为txt_search_full_name_all 来自PCOUNTERPARTY c;
– 创建域索引 在m_pcounterparty上创建索引IDXM_1_pcounterparty(TXT_SEARCH_FULL_NAME_ALL)indextype是ctxsys.context PARAMETERS(‘SYNC(ON COMMIT)’);
– 物化视图的刷新 EXECUTE DBMS_MVIEW.REFRESH(‘M_PCOUNTERPARTY’); – 索引的刷新 exec ctx_ddl.sync_index(‘IDXM_1_pcounterparty’);
– 在物化视图中搜索 选择 ????TXT_SEARCH_FULL_NAME_ALL 从 ???M_PCOUNTERPARTY c 哪里 ???CONTAINS(c.TXT_SEARCH_FULL_NAME_ALL,’martin’,1)> 0; – 返回零,这是问题 ???–c.TXT_SEARCH_FULL_NAME_ALL LIKE’%MARTIN%’; – 返回行但我们想通过CONTAINS搜索
解决方法
Oracle Text索引通常搜索单词,而不是字符串.
在“马丁路德金小”中搜索“马丁”不需要通配符.但是在“MARTINKO3”中搜索“martin”需要使用通配符.
将CONTAINS谓词更改为:
CONTAINS(c.TXT_SEARCH_FULL_NAME_ALL,'martin%',1) > 0;
我在Oracle 12.2上运行了测试,但在使用表或物化视图之间没有发现任何行为差异.也许有一个测试错误或一个非常具体的错误导致文本索引在您的系统上采取不同的行为.
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|