这是 Elasticsearch 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。
入门
入门
Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。
下载
注意: ${VERSION}
需替换为指定版本,官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。
Windows
1
| https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip
|
linux
1 2 3 4 5 6 7 8 9
| $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
$ tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz
$ cd elasticsearch-${VERSION}/
|
macos
1 2 3 4 5 6 7
| $ curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
$ tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ cd elasticsearch-${VERSION}/
|
启动
启动 Elasticsearch
设置密码
1
| export ELASTIC_PASSWORD="your_password"
|
测试是否启动成功
1
| curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
|
成功则返回样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "name" : "Cp8oag6", "cluster_name" : "elasticsearch", "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA", "version" : { "number" : "${VERSION}", "build_type" : "tar", "build_hash" : "f27399d", "build_flavor" : "default", "build_date" : "2016-03-30T09:51:41.449Z", "build_snapshot" : false, "lucene_version" : "9.10.0", "minimum_wire_compatibility_version" : "1.2.3", "minimum_index_compatibility_version" : "1.2.3" }, "tagline" : "You Know, for Search" }
|
Elasticsearch 和 RDMS 的对比
RDMS |
elasticsearch |
数据库(database) |
索引(index) |
表(table) |
类型(type) |
行(row) |
文档(document) |
列(column) |
字段(field) |
表结构 |
映射 |
索引 |
全文索引 |
SQL |
查询DSL |
SELECT * FROM tablename |
GET http://… |
UPDATE table SET |
PUT http://… |
DELETE |
DELETE http://… |
操作
基础语法规则
1
| $ curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
|
VERB HTTP
方法:GET, POST, PUT, HEAD, DELETE
PROTOCOL
:http 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用)
HOST
:Elasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost
PORT
:Elasticsearch HTTP 服务所在的端口,默认为 9200
PATH API 路径
(例如_count 将返回集群中文档的数量),PATH:可以包含多个组件,例如_cluster/stats 或者_nodes/stats/jvm
QUERY_STRING
:一些可选的查询请求参数,例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
BODY
:一个 JSON 格式的请求主体(如果请求需要的话)
创建索引
统一请求 api 前缀
DSL语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| PUT /user_info { "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }
|
curl
1
| curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }'
|
参数说明
settings
: 设置索引的信息
number_of_shards
: 每个索引的主分片数,一旦索引创建后,无法修改此配置
number_of_replicas
: 每个主分片的副本数,此配置可随时修改
mappings
: 索引映射定义
properties
: 字段定义。使用 JSON 配置,键为字段名称(自定义),值为嵌套 JSON,其中 type
指定字段的类型
其他参数很多,请参考官网资料
删除索引
DSL语法
curl
1
| curl -XDELETE "http://localhost:9200/user_info"
|
判断索引是否存在
DSL语法
1 2
| # 查看索引是否存在 HEAD /user_info
|
curl
1 2
| # 查看索引是否存在 curl -XHEAD "http://localhost:9200/user_info"
|
开启/关闭索引
开启DSL语法
curl
1
| curl -XPOST "http://localhost:9200/user_info/_open"
|
关闭 DSL 语法
curl
1
| curl -XPOST "http://localhost:9200/user_info/_close"
|
索引的别名
1
| POST /user_info/_alias/user1
|
1
| curl -XPOST "http://localhost:9200/user_info/_alias/user1"
|
1
| DELETE /user_info/_alias/user1
|
1
| curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
|
1
| curl -XGET "http://localhost:9200/_alias/useraa"
|
Mapping 操作
类似修改数据库中列的操作
查看 mapping
DSL语法
1
| curl -XGET "http://localhost:9200/user_info/_mapping"
|
新增 mapping
DSL语法
1 2 3 4 5 6
| PUT /user_info/_mapping { "properties":{ "sex":{ "type":"keyword" } } }
|
1
| curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }'
|
注意
: 需要注意的是字段映射只能增加,不能更改删除
文档的操作
添加文档
新增一条数据 - DSL语法
1 2 3 4 5 6 7 8 9 10 11
| POST /user_info/_doc/1 { "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }
|
1
| curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }'
|
查询指定索引的所有文档
类似数据库中的 select * from user_info;
DSL语法
1 2 3 4 5 6
| GET /user_info/_search { "query": { "match_all": {} } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }'
|
通过 id 查询文档
类似数据库中的 select * from user_info where id = 1;
DSL语法
1
| curl -XGET "http://localhost:9200/user_info/_doc/1"
|
模糊查找
类似数据库中的模糊查询 select * from user_info where info like '%人%';
DSL语法
1 2 3 4
| GET /user_info/_search { "query": { "match": { "info": "人" } } }
|
通过条件查询文档
类似数据库中的 select * from user_info where username = 'username';
通过条件查询 - DSL语法
1 2 3 4 5 6 7 8
| GET /user_info/_search { "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'
|
范围查找
类似数据库中的范围查询 select * from user_info where age between 18 and 30;
DSL语法
1 2 3 4 5 6 7 8 9 10 11
| GET /user_info/_search { "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }'
|
and 查询
类似数据库中的 and 查询 select * from user_info where age > 18 and sex = '男';
DSL语法
1 2 3 4 5 6 7 8 9 10 11
| GET /user_info/_search { "query": { "bool": { "must": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }'
|
limit 查找
类似数据库中的 limit 查询 select * from user_info limit 10;
DSL语法
1 2 3 4 5 6 7
| GET /user_info/_search { "size": 10, "query": { "match_all": {} } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'
|
limit offset 查找
类似数据库中的 limit 查询 select * from user_info limit 0,10;
DSL语法
1 2 3 4 5 6 7 8
| GET /user_info/_search { "size": 2, "from": 1, "query": { "match_all": {} } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
|
参数说明
size
: 10 表示我们想要返回的结果数量是10条
from
: 20 表示我们想要从结果集中的第21条记录开始返回(因为偏移是从0开始的)
query
: {"match_all": {}}
是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果
or 查询
类似数据库中的 or 查询 select * from user_info where age > 18 or sex = '男';
DSL语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| GET /user_info/_search { "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }
|
1
| curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }'
|
删除文档
删除指定 id
类似数据库中的 delete 查询 delete from user_info where id = 3;
DSL语法
1 2
| # 删除文档 DELETE /user_info/_doc/3
|
1 2
| # 删除文档 curl -XDELETE "http://localhost:9200/user_info/_doc/3"
|
删除指定条件
类似数据库中的 delete 查询 delete from user_info where age > 18;
DSL语法
1 2 3 4 5 6
| POST /user_info/_delete_by_query { "query": { "range": { "age": { "gt": 18 } } } }
|
1
| curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
|