oracle – 物化视图中的域索引返回零行

oracle – 物化视图中的域索引返回零行,第1张

概述我有Oracle DB的问题 – 在物化视图上通过CONTAINS()搜索后,域索引返回零行.我看到物化视图充满了数据,我还使用过程ctx_ddl.sync_index()进行域索引同步. 什么有用: >创建表 >插入数据 >创建域索引 > SYNC DOMAIN INDEX >通过包含找到行 – 返回行 什么不起作用: >创建表 >插入数据 >创建物化视图 >刷新材料化视图 >在物化视图中创建域 我有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上运行了测试,但在使用表或物化视图之间没有发现任何行为差异.也许有一个测试错误或一个非常具体的错误导致文本索引在您的系统上采取不同的行为.

总结

以上是内存溢出为你收集整理的oracle – 物化视图中的域索引返回零行全部内容,希望文章能够帮你解决oracle – 物化视图中的域索引返回零行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1160524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存