暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle的全文索引

四海内皆兄弟 2021-12-11
370

     上一篇说了MySQL的全文检索。其实我最早是用Oracle的全文。因为在没有elasticsearch之前,日子总要过吧?Shay Banon在2004年创造了Elasticsearch的前身,称为Compass。在考虑Compass的第三个版本时,他意识到有必要重写Compass的大部分内容,以“创建一个可扩展的搜索解决方案”。因此,他创建了“一个从头构建的分布式解决方案”,并使用了一个公共接口,即HTTP上的JSON,它也适用于Java以外的编程语言。Shay Banon在2010年2月发布了Elasticsearch的第一个版本。

    现如今不少使用elasticsearch的其实用的也不太对。因为elasticsearch即使搜索引擎也能存数据。所以他是一个数据库。结果有人拿着这个锤子看什么都是钉子。不管合适不合适都存到里面去。

    可以吗?可以,但是不是都有必要。如果仅仅存储读取没问题。如果说从关系型数据库同步,未必能保证一致。其实关系型数据库现在都是多模,谁家还做不了个这个?

    上一篇写了MySQL的。今天是Oracle的。PG的实验请拭目以待。

    执行一下授权:

grant execute on ctx_ddl to xxg;


建表和MySQL的一样。

exec ctx_ddl.create_preference('my_lexer','chinese_lexer');


exec ctx_ddl.create_preference('my_filter','CHARSET_FILTER');


exec ctx_ddl.set_attribute('my_filter','charset','ZHS16GBK');


create index idx_ft on full (name) indextype is ctxsys.context parameters('lexer my_lexer');


红色的是表名和列明。


开始查询(模拟数据都一样)


如果要实现“网易”+“广州” 排除全角半角怎么办?我开始不知道语法是什么?

后来想想不就是且的关系吗?


于是乎:

select * from full where contains(name,'网易')>0 and contains(name,'广州')>0;

嗯,就是这样。


文章转载自四海内皆兄弟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论