ElasticSearch汇总请查看:ElasticSearch教程——汇总篇
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields
一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:
节点 | 说明 |
---|---|
_index |
文档存储的地方 |
_type |
文档代表的对象的类 |
_id |
文档的唯一标识 |
_index:索引
_type:类型
_id:
id仅仅是一个字符串,它与_index
和_type
组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id
,也可以让Elasticsearch帮你自动生成。
以kibana的方式操作ES的可以查看ElasticSearch教程——Kibana简单操作ES
以博客内容管理为例,索引名为blog,类型为article,自定义id是“1”,新加一个文档:
-
curl -H
'Content-Type:application/json' -XPUT http:
//localhost:9200/blog/article/1 -d '
-
{
-
"id":
"1",
-
"title":
"New version of Elasticsearch released!",
-
"content":
"Version 1.0 released today!",
-
"priority":
10,
-
"tags": [
"announce",
"elasticsearch",
"release"]
-
}
'
当我们想要一个自增ID的时候,直接不用设置id即可,即原来是把文档存储到某个ID对应的空间,现在是把这个文档添加到某个_type
下(注意:这边是POST不是PUT)
-
curl -H
'Content-Type:application/json' -XPOST http:
//localhost:9200/blog/article/ -d '
-
{
-
"title":
"New version of Elasticsearch released!",
-
"content":
"Version 1.0 released today!",
-
"priority":
10,
-
"tags": [
"announce",
"elasticsearch",
"release"]
-
}
'
返回结果:
-
{
-
"_index":
"blog",
-
"_type":
"article",
-
"_id":
"eTmX5mUBtZGWutGW0TNs",
-
"_version":
1,
-
"result":
"created",
-
"_shards": {
-
"total":
2,
-
"successful":
1,
-
"failed":
0
-
},
-
"_seq_no":
0,
-
"_primary_term":
1
-
}
自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突。
在对应的浏览器地址栏输入如下地址
http://XXX.XXX.XXX.XX:9200/blog/article/1?pretty
或者在Linux中使用如下脚本:
curl -H 'Content-Type:application/json' -XGET http://localhost:9200/blog/article/1?pretty
响应包含了现在熟悉的元数据节点,增加了_source
字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档。
pretty:
在任意的查询字符串中增加pretty
参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。
_source
字段不会被美化,它的样子与我们输入的一致,现在只包含我们请求的字段,而且过滤了date
字段。
或者你只想得到_source
字段而不要其他的元数据,你可以这样请求:
curl -H 'Content-Type:application/json' -XGET http://localhost:9200/blog/article/1/_source
返回结果:
-
{
-
"id":
"1",
-
"title":
"New version of Elasticsearch released!",
-
"content":
"Version 1.0 released today!",
-
"priority":
10,
-
"tags": [
"announce",
"elasticsearch",
"release"]
-
}
请求返回的响应内容包括{"found": true}
。这意味着文档已经找到。如果我们请求一个不存在的文档,依旧会得到一个JSON,不过found
值变成了false
。此外,HTTP响应状态码也会变成'404 Not Found'
代替'200 OK'
。我们可以在curl
后加-i
参数得到响应头:
curl -H 'Content-Type:application/json' -i -XGET http://localhost:9200/blog/article/1?pretty
显示结果:
-
HTTP/
1.1
200 OK
-
content-
type: application/json; charset=UTF
-8
-
content-length:
337
-
-
{
-
"_index" :
"blog",
-
"_type" :
"article",
-
"_id" :
"1",
-
"_version" :
1,
-
"found" :
true,
-
"_source" : {
-
"id" :
"1",
-
"title" :
"New version of Elasticsearch released!",
-
"content" :
"Version 1.0 released today!",
-
"priority" :
10,
-
"tags" : [
-
"announce",
-
"elasticsearch",
-
"release"
-
]
-
}
-
}
-
curl -H
'Content-Type:application/json' -XPOST http:
//localhost:9200/blog/article/1/_update -d '{
-
"script":
"ctx._source.content = \"new content\""
-
}
'
curl -XDELETE http://localhost:9200/blog/article/1