环境
elasticsearch:5.2.2
索引 —即:数据库
我自己理解:存储数据的行为就叫做索引。通俗点就是插入数据。
官网翻译的解释:Elasticsearch中存储数据的行为就叫做索引
官网给出的和关系型数据库的类比图:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
数据库类型 | 数据库 | 表 | 行 | 列 |
---|---|---|---|---|
关系型数据库 | 数据库 | 表 | 行 | 列 |
Elasticsearch | 索引 | 类型 | 文档 | 字段 |
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
默认情况下,文档中的所有字段都会被索引(拥有一个倒排索引),只有这样他们才是可被搜索的。
基于http协议,以json为数据交互的Restful API
请求格式:
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
QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观易读的JSON数据
BODY 一个JSON格式的请求主体(如果请求需要的话)
举例说明:
curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
"query": {
"match_all": {}
}
}'
《elasticsearch权威指南》中的简写:
一个完整的请求形如:
curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
"query": {
"match_all": {}
}
}'
我们将简写成这样:
GET /_count
{
"query": {
"match_all": {}
}
}
在cmd中插入数据报错
我在cmd
中执行:
C:\Users\yutao>
curl -XPUT "http://127.0.0.1:9200/megacorp/employee/1" -d '{"first_name":"yutao","last_name":"smith","age":25,"about":"1III","interests":["sports","music"]}'
这样会报错:
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to p
arse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by"
:{"type":"not_x_content_exception","reason":"Compressor detection can only be ca
lled on some xcontent bytes or compressed xcontent bytes"}},"status":400}
原因是:json内部的双引号则转义
,也就是要这么写:
C:\Users\yutao>
curl -XPUT "http://127.0.0.1:9200/megacorp/employee/1" -d "{\"first_name\":\"yutao\",\"last_name\":\"misssad\",\"age\":25}"
就OK
啦。