gpt4 book ai didi

sql - Oracle 包含不工作

转载 作者:行者123 更新时间:2023-12-04 19:10:46 25 4
gpt4 key购买 nike

我的表中有一个上下文索引的列。

CREATE INDEX CIDX_MUSTFIXBY ON TABLE
(MUST_FIX_BY)
INDEXTYPE IS CTXSYS.CONTEXT
NOPARALLEL;

我正在尝试使用 where 条件进行查询

AND must_fix_by LIKE 'Q2%'



它返回行。

但是,当我尝试使用 where 条件查询时

AND contains(must_fix_by, 'Q2') > 0



它不返回任何行。

有人可以告诉我为什么喜欢工作而包含不工作吗?

最佳答案

两个可能的原因 - 索引可能不同步,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
-----------
Q234567
Q2 234567

select * from test1 where contains(must_fix_by, 'Q2') > 0;

no rows selected

默认情况下, CONTEXT 索引需要是 manually synchronized 。您要么需要运行: exec ctx_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 过滤器拾取。

关于sql - Oracle 包含不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com