创建一个索引
我们已经通过索引一篇文档创建了一个新的索引 。
这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射。
索引模板
Elasticsearch 不要求你在使用一个索引前创建它。 对于日志记录类应用,依赖于自动创建索引比手动创建要更加方便。
Logstash 使用事件中的时间戳来生成索引名。
默认每天被索引至不同的索引中,因此一个 @timestamp 为 2014-10-01 00:00:01 的事件将被发送至索引 logstash-2014.10.01 中。
如果那个索引不存在,它将被自动创建。
通常我们想要控制一些新建索引的设置(settings)和映射(mappings)。
也许我们想要限制分片数为 1 ,并且禁用 _all 域。
索引模板可以用于控制何种设置(settings)应当被应用于新创建的索引:
PUT /_template/my_logs #创建一个名为 my_logs 的模板。
{
"template": "logstash-*", #将这个模板应用于所有以 logstash- 为起始的索引。
"order": 1, #这个模板将会覆盖默认的 logstash 模板,因为默认模板的 order 更低。
"settings": {
"number_of_shards": 1 # 限制主分片数量为 1 。
},
"mappings": {
"_default_": {
"_all": { # 为所有类型禁用 _all 域。
"enabled": false
}
}
},
"aliases": {
"last_3_months": {} # 添加这个索引至 last_3_months 别名中。
}
}
这个模板指定了所有名字以 logstash- 为起始的索引的默认设置,不论它是手动还是自动创建的。 如果我们认为明天的索引需要比今天更大的容量,我们可以更新这个索引以使用更多的分片。
这个模板还将新建索引添加至了 last_3_months 别名中,然而从那个别名中删除旧的索引则需要手动执行。
删除索引
删除指定的索引
DELETE /my_index
删除多个索引
DELETE /index_one,index_two
DELETE /index_*
DELETE /_all
DELETE /*
能够用单个命令来删除所有数据可能会导致可怕的后果。
如果你想要避免意外的大量删除,
你可以在你的 elasticsearch.yml 做如下配置: action.destructive_requires_name: true
索引设置
最重要的两个设置
- 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
}
类型和映射
类型 在 Elasticsearch 中表示一类相似的文档。
类型由 名称 —比如 user 或 blogpost —和 映射 组成。
映射, 就像数据库中的 schema ,描述了文档可能具有的字段或 属性 、
每个字段的数据类型—比如 string, integer 或 date —以及Lucene是如何索引和存储这些字段的。
类型的实现
Elasticsearch 类型是 以 Lucene 处理文档的这个方式为基础来实现的。
一个索引可以有多个类型,这些类型的文档可以存储在相同的索引中。
Lucene 没有文档类型的概念,每个文档的类型名被存储在一个叫 _type 的元数据字段上。 当我们要检索某个类型的文档时,
Elasticsearch 通过在 _type 字段上使用过滤器限制只返回这个类型的文档。
Lucene 也没有映射的概念。 映射是 Elasticsearch 将复杂 JSON 文档 映射 成 Lucene 需要的扁平化数据的方式。
例如,在 user 类型中, name 字段的映射可以声明这个字段是 string 类型,并且它的值被索引到名叫 name 的倒排索引之前,需要通过 whitespace 分词器分析:
索引别名和零停机
有两种方式管理别名: _alias 用于单个操作, _aliases 用于执行多个原子级操作。
我们假设你的应用有一个叫 my_index 的索引。事实上, my_index 是一个指向当前真实索引的别名。真实索引包含一个版本号: my_index_v1 , my_index_v2 等等
PUT /my_index_v1
PUT /my_index_v1/_alias/my_index
查询索引别名指向的索引
GET /*/_alias/my_index
哪些别名指向这个索引
GET /my_index_v1/_alias/*
一个别名可以指向多个索引,所以我们在添加别名到新索引的同时必须从旧的索引中删除它。这个操作需要原子化,这意味着我们需要使用 _aliases 操作:
POST /_aliases
{
"actions": [
{ "remove": { "index": "my_index_v1", "alias": "my_index" }},
{ "add": { "index": "my_index_v2", "alias": "my_index" }}
]
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。