什么是Elasticsearch?
简单地说,Elasticsearch就是用来搜索的。传统的数据库,想要搜索某一条信息时,用到的SQL命令是:like %关键字%。然而,在一些大数据的环境下,这种SQL就会特别慢。因此要用到Elasticsearch。
通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性。分布式的实时文件存储,每个字段都被索引并可被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理PB级结构化或非结构化数据。
因此,未来只要需要搜索,就可以用ES。
上文提到的Lucence就是用于全文检索的,是一套信息检索工具包,不包含搜索引擎。包含:索引结构(有点像数据库)、读写索引的工具、排序搜索的规则。但是由于数据量越来越大,因此Lucence逐渐不够用了。
Elasticsearch就是基于Lucence做了一些封装和增强。
ES(Elasticsearch)就是一个开源的高扩展的分布式全文检索引擎。他可以做到近乎实时的存储和检索数据(查询的效率非常非常高)。
ES & Solr
ES用于全文搜索、结构化搜索、分析三个方面。
例如:维基百科使用ES进行搜索,并高亮搜索的关键字。Stackoverflow、Github都用到了ES。
Solr也是基于Lucence,同时实现了可配置、可拓展、并优化了搜索性能。
随着数据量的增加,Solr的处理速度远低于ES。
ES基本就是解压就可以用。Solr需要搭载Zookeeper环境。
ES安装
下载地址:https://www.elastic.co/cn/downloads/elasticsearch
解压文件,观察config文件夹下的配置文件,可以发现ES的默认端口是9200。
使用Terminal进入相应文件夹,进入Bin文件夹,运行ES。ES跑起来以后,可以去浏览器访问默认的地址127.0.0.1:9200。然后就能看到版本信息。
可视化操作ES,可以使用Google Chrome,使用插件ES Head。
Kibana也是针对ES的一个可视化平台,可以用来搜索和查看交互存储在ES上面的数据。在ES官网下载,和ES安装一样的步骤。跑起来以后,默认的地址是http://localhost:5601。
面向文档的ES
Elasticsearch 是 面向文档的,意味着它存储整个对象或文档。Elasticsearch 不仅存储文档,而且索引每个文档的内容使之可以被检索。在 Elasticsearch 中,你 对文档进行索引、检索、排序和过滤–而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。
DB | ES |
数据库 Database | 索引 Index |
表 Table | Type |
行 Rows | Documents |
字段 Columns | Fields |
默认的集群名称就是Elasticsearch。

ES后台把每个索引划分为了多个分片。索引可以直接理解成一个数据库,是一个非常大的文档集合。
所谓文档,就是一条条的数据。
一个集群至少有一个节点,一个节点就是一个ES进程。
IK分词器
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
IK分词器对中文比较友好,IK分词器提供了两个分词的算法,一个是ik_smart,一个是ik_max_word。前者是最小切分,后者是最细粒度划分。下两图是两种算法的结果


下图可以看到,“田睿霖”这个词,在分词器中并没有被当成一个词。因此,可以将“田睿霖”这个词加到字典里面。

- 进入IK的文件夹,在config里面添加一个自己写的dic文件。
- 然后在config里面的xml文件里面添加刚刚创建的dic文件名。
- 重启ES。

在未来的工作中,可以在自己的dic文件中加入自己想要的词。
Restful风格的基本操作
Method | 描述 |
PUT | 创建文档 |
GET | 查看信息 |
POST | 创建、更新、查询 |
DELETE | 删除 |

type在后续版本中,默认是_doc.


GET可以直接得到具体的信息。如果PUT不定义类型,他会自动分配类型,示例如下。


通过 “GET _cat/” 可以获得ES当前的信息。
POST可以用来修改数据,如下图。

接下来尝试搜索功能:
首先,新建一个索引。






切记使用POST方法更新数据时,用_update。否则数据就会像PUT一样被覆盖掉。
最简单的搜索就是上文提到的GET,即通过ID查询。但是我们需要条件查询,所以需要下面的操作:
