记得小马最早期刚参加工作的时候全文索引用的是Sphinx。 当一个功能需要对表中的text varchar等文本进行like查询时,MySQL全表扫描很慢,需要Sphinx。Sphinx能解决性能和中文分词问题。
Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据库本身更专业的搜索功能,而且可以有很多针对性的性能优化。
使用流程:
1.PHP先把要搜索的短语发给sphinx服务器(用API发起请求),sphinx服务器返回的是记录的ID
2.PHP用sphinx返回的ID查询数据库。
Elasticsearch是啥
百科如是说:
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
小马本来想自己整理下这块东西,无意间看到一篇漫画式的文章,特别清晰而且通俗易懂,忍不住引用了,为作者的良苦用心点赞。
原文地址:终于有人把Elasticsearch原理讲透了!
倒排索引
可以通俗理解为使用文本内分词关键字建立索引,搜索时先找到标题再找到内容(百度谷歌搜索引擎原理)。
搜索引擎原理
Elasticsearch简介
ES基本概念
吕老师:之前我们说过,Elasticsearch 把操作都封装成了 HTTP 的 API,我们只要给 Elasticsearch 发送 HTTP 请求就行。
比如使用curl -XPUT 'http: //ip:port/poems',就能建立一个名为 Poems 的索引,其他操作也是类似的。
Elasticsearch 分布式原理
ELK系统
吕老师:但是如果日志接入了ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。
es集群+elk搭建+kafka搭建分布式日志收集系统。
总结
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
搜索引擎原理就是建立反向索引。
Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
Elasticsearch 一个典型应用就是 ELK 日志分析系统。
Elasticsearch如何再项目中配合MySQL使用
像的处理流程上面已经介绍了,那ES怎么结合项目呢?以下的意思是直接同步DB数据,然后即可以同时支持查询考了。但应该会有更高效的协作方式,你觉得呢?