文档是什么
ES里面每一条数据称之为文档(json格式)
文档元数据
_index
索引类似于关系型数据里面的数据库,它是我们存储和索引关联数据的地方。
名字必须是全部小写,不能以下划线开头,不能包含逗号。让我们使用website做为索引名。
_type
在Elasticsearch中,我们使用相同类型(type)的文档表示表,因为他们的数据结构也是相同的。
_id
id仅仅是一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档。
当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。
一个文档的格式
PUT /{index}/{type}/{id}
{
"field": "value",
...
}
例子:
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
查询文档
想要从Elasticsearch中获取文档,我们使用同样的_index、_type、_id,但是HTTP方法改为GET:
GET /website/blog/123?pretty
在任意的查询字符串中增加pretty参数,可以美化输出结果.
可以在curl后加-i参数得到响应头
curl -i -XGET http://localhost:9200/website/blog/124?pretty
GET请求将返回文档的全部,存储在_source参数中。但是可能你感兴趣的字段只是title。请求个别字段可以使用_source参数。多个字段可以使用逗号分隔
GET /website/blog/123?_source=title,text
只得到 _source 字段而不要其他的元数据,你可以这样请求
GET /website/blog/123/_source
它仅仅返回:
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
检查文档是否存在,使用HEAD, HEAD 请求不会返回响应体,只有HTTP头
curl -i -XHEAD http://localhost:9200/website/blog/123
如果文档存在返回
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
如果文档不存在
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
更新文档
ES中不能修改,但是 重建索引(reindex) 或者替换掉它。
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}
进行put后
_version增加了
{
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 2,
"created": false <1>
}
删除文档
DELETE /website/blog/123
索引
创建索引
PUT /my_index
在 config/elasticsearch.yml 中添加下面的配置来防止自动创建索引
action.auto_create_index: false
删除索引
DELETE /my_index
删除多个索引
DELETE /index_one,index_two
DELETE /index_*
删除多个索引
DELETE /_all
索引的设置
Elasticsearch 提供了优化好的默认配置。除非你明白这些配置的行为和为什么要这么做,请不要修改这些配置。
下面是两个最重要的设置:
number_of_shards:定义一个索引的主分片个数,默认值是 `5`。这个配置在索引创建后不能修改。
number_of_replicas:每个主分片的复制分片个数,默认是 `1`。这个配置可以随时在活跃的索引上修改。
创建只有一个主分片,没有复制分片的小索引。
PUT /my_temp_index
{
"settings": {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
}
用 update-index-settings API 动态修改复制分片个数:
PUT /my_temp_index/_settings
{
"number_of_replicas": 1
}