10 分钟入门 Elasticsearch
官方主页对 Elasticsearch(以下简称 ES)的定义是:
一个分布式的、RESTful 的搜索和数据分析的引擎
但排除掉这些炫酷的词汇,其核心只有一个:数据库。
我们就从这个最核心的角度来入门 ES 吧。
安装 ES
ES 的官方网站上有详细的安装指南,我们这里只对 Mac 上的安装做一个总结:
-
安装 java(因为 ES 的安装包本质上是一堆 java 文件):
brew cask install java
- 下载 ES 的 Mac 版,解压文件,示例:
tar -xvf elasticsearch-6.x.x.tar.gz
- 进入解压出来的文件夹,执行
bin/elasticsearch
,等待 ES 运行起来 - 用浏览器访问
http://localhost:9200/
,会看到 ES 返回的信息
这样,你就按照好了一个 ES,他有很多配置项,在 config/
目录下,可以去探索一下。
接下来,为了更直观的使用 ES,我们安装 Kibana。
按照 Kibana
Kibana 是什么?
如果说 ES 是个数据库,那么 Kibana 就是他的图形化操作软件(或曰 GUI console)。其之于 ES,就好像 workbench、sequel pro 等软件之于 MySQL。
Kibana 的官网上也按照方法,我们这里只对 Mac 版的按照做个总结:
- 下载 Mac 版安装包,并解压,示例:
tar -xvf kibana-6.x.x.tar.gz
- 进入解压出来的文件夹,执行
bin/kibana
- 用浏览器访问
http://localhost:5601
其实,Kibana 是通过上面提到的 localhost:9200
访问 ES 的。如果你在 ES 的配置项中,更改了 ES 的端口,或绑定的 IP,那么就需要在 Kibana 的 config/kibana.yml
中总结指明这个修改。
增删改查
因为某些我还不知道的原因,这个世界上 99% 的数据库(99%是我猜的),归纳起来竟然只有 4 种操作:增删改查,或曰CRUD(增查改删)。
ES 作为一种数据库,也很难例外。所以,作为入门的最后一小节,我们就来看看 ES 中是怎么 CRUD 的。
1. 增 - Create:
首先说,ES 中存储的是一个一个的 JSON document(这一点和 mongoDB 有点像),你要 Create 一个 document,就把一个 JSON 发给 ES,语法是这样的:
POST /your_index/some_type
{
"name": "Li Lei",
"location": "the Earth"
}
其中 POST 代表“创建”动作;your_index
代表索引,这个索引不用事先创建,这是非关系型数据库的优势;some_type
是 document 的类型。索引和类型都可以替换为你想要的名字。
在 Kibana 中执行这个语句,会得到 ES 的返回如下:
Kibana 的 Dev Tools 界面哦,对了,ES 官网上说自己是 RESTful 的引擎,不是瞎说的,他们真的用 RESTful 的模式来设计自己的增删改查语法,比如上面的 POST
语法。可以想见,按照 RESTful 的模式,在查改删的时候,ES 会用 (GET、PUT、DELETE) /index/type/:id
这样形式的语法。
在 Kibana 中执行的语句,本质上是往 ES 中发送了一个 http 请求。如果你不想使用 Kibana,完全可以用别的工具发送这个 http 请求,比如 cURL,或 postman:
curl -XPOST "http://localhost:9200/your_index/some_type" -H 'Content-Type: application/json' -d'
{
"name": "Li Lei",
"location": "the Earth"
}'
2. 查 - Read
就像 MySQL 等数据库中,查的需求是最多样的(各种表的联合,条件筛选等),ES 中也是。我们这里只介绍最基本的查询:
GET /your_index/some_type/dqJTKGYBHQF78ND_EEzo
请留意一下上图中的红色箭头所指示的 _id
,他就是你的 document 的 id,如果你想按 id 查询(类似于 SQL 中的 where id = ?
),那么就要记住这个 id,然后用上面依然很 RESTful 的语法。
当然,你也可以查询一个索引下面的所有 documents:
GET /your_index/_search
{
"query": {
"match_all": {}
}
}
请到你的 Kibana 中,执行这些语句。
3. 改 - Update
PUT /your_index/some_type/dqJTKGYBHQF78ND_EEzo
{
"name": "Han Meimei",
"location": "the Earth"
}
就不多解释了吧。指定 id 下的 document,会被更改成新的 document,同时 _version
会增加 1。
4. 删 - Delete
DELETE /your_index/some_type/dqJTKGYBHQF78ND_EEzo
执行之后,这个 document 就找不到了,你可以再去 GET 他试试。
Recap
- 安装 ES
- 安装 Kibana (作为 ES 的 console)
- 了解 ES 增删改查的基本语法