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

嗯,就是这样。





