ITPub博客

首页 > 数据库 > Oracle > Oracle的全文索引

Oracle的全文索引

原创 Oracle 作者:xuexiaogang 时间:2021-12-10 21:36:38 0 删除 编辑

自己原文公众号: https://mp.weixin.qq.com/s/IRudl8cUdkR8UYdZOVBdKg

上一篇说了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;

嗯,就是这样。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2847120/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 聊一聊CPU负载
请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953184