一、搜索引擎三大过程
1、爬去内容
2、进行分词。进行停顿词过滤。
3、建立反向索引
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
二、Elasticsearch 简介
Lucene业界成熟的建立倒排索引开源解决方案。
但是Lucene 还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 Elasticsearch。
Elasticsearch将对搜索引擎的操作都封装成了restful的api,可以通过http请求对其进行操作。
同时Elasticsearch实现了分布式,是一个可以存储海量数据的分布式搜索引擎。
三、Elasticsearch 基本概念
Elasticsearch三大基础元素:索引,类型,文档。
索引可以理解为mysql中的一个数据库。
类型是用来定义数据结构的,可以认为是 MySQL 中的一张表。
文档就是最终的数据了,你可以认为一个文档就是一条记录。
四、Elasticsearch数据存储
比如一首诗,有诗题、作者、朝代、字数、诗内容等字段。
首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。比如诗题、作者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,最后就是把数据组织成 Json 格式存放进去了。
这涉及到分词的问题,Keyword 类型是不会分词的,直接根据字符串内容建立反向索引。
Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立反向索引。
Elasticsearch 把操作都封装成了 HTTP 的 API,我们只要给 Elasticsearch 发送 HTTP 请求就行。
比如使用 curl -XPUT 'http://ip:port/poems',就能建立一个名为 Poems 的索引,其他操作也是类似的。
五、Elasticsearch 分布式原理
Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
Elasticsearch 对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用。
在 Elasticsearch 中,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。
只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。
六、ELK 系统
Elasticsearch 一个典型应用就是 ELK 日志分析系统。
很多公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。