本文翻译自Elasticsearch官方指南的索引管理(Index Management)一章html
咱们已经了解了ES是如何在不须要任何复杂的计划和安装就能让咱们很容易地开始开发一个新的应用的。可是,用不了多久你就会想要仔细调整索引和搜索过程来更好的适配你的用例。json
几乎全部的定制都和索引(Index)以及其中的类型(Type)相关。本章咱们就来讨论用于管理索引和类型映射的API,以及最重要的设置。app
到如今为止,咱们已经经过索引一份文档来完成了新索引的建立。这个索引是使用默认的设置建立的,新的域经过动态映射(Dynamic Mapping)的方式被添加到了类型映射(Type Mapping)中。elasticsearch
如今咱们对这个过程拥有更多的控制:咱们须要确保索引被建立时拥有合适数量的主分片(Primary Shard),而且在索引任何数据以前,咱们须要设置好解析器(Analyzers)以及映射(Mappings)。ide
所以咱们须要手动地去建立索引,将任何须要的设置和类型映射传入到请求正文中,就像下面这样:测试
PUT /my_index { "settings": { ... }, "mappings": { "type_one": { ... }, "type_two": { ... }, ... } }
事实上,若是你想阻止索引被自动建立,能够经过添加下面的设置到每一个节点的config/elasticsearch.yml文件中:ui
action.auto_create_index: false
未来,咱们会讨论如何使用索引模板(Index Template)来预先定义自动生成的索引。这个功能在索引日志数据的时候有用武之地:索引的名字中会包含日期,天天都有一个有着合适配置的索引被自动地生成。spa
使用下面的请求完成索引的删除:翻译
DELETE /my_index
你也能够删除多个索引:日志
DELETE /index_one,index_two DELETE /index_*
你甚至还能够删除全部的索引:
DELETE /_all
虽然索引的种种行为能够经过索引模块的参考文档介绍的那样进行配置,可是……
TIP
ES中提供了一些很好的默认值,只有当你知道它是干什么的,以及为何要去修改它的时候再去修改。
两个最重要的设置:
一个索引中含有的主分片(Primary Shard)的数量,默认值是5。在索引建立后这个值是不能被更改的。
每个主分片关联的副本分片(Replica Shard)的数量,默认值是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 }
第三个重要的索引设置就是解析(Analysis),能够利用已经存在的解析器(Analyzer)进行配置,或者是为你的索引定制新的解析器。
在解析和解析器中,咱们介绍了一些内置的解析器,它们用来将全文字符串转换成适合搜索的倒排索引(Inverted Index)。
对于全文字符串字段默认使用的是standard解析器,它对于多数西方语言而言是一个不错的选择。它包括:
standard分词器。它根据词语的边界进行分词。
standard token过滤器。用来整理上一步分词器获得的tokens,可是目前是一个空操做(no-op)。
lowercase token过滤器。将全部tokens转换为小写。
stop token过滤器。移除全部的stopwords,好比a,the,and,is等
默认下stopwords过滤器没有被使用。能够经过建立一个基于standard解析器的解析器并设置stopwords参数来启用。要么提供一个stopwords的列表或者告诉它使用针对某种语言预先定义的stopwords列表。
在下面的例子中,咱们建立了一个名为es_std的解析器,它使用了预先定义的西班牙语中的stopwords列表:
PUT /spanish_docs { "settings": { "analysis": { "analyzer": { "es_std": { "type": "standard", "stopwords": "_spanish_" } } } } }
es_std解析器不是全局的 - 它只做用于spanish_docs索引。能够经过制定索引名,使用analyze API进行测试:
GET /spanish_docs/_analyze?analyzer=es_std { El veloz zorro marrón }
下面的部分结果显示了西班牙语中的stopword El已经被正确地移除了:
{ "tokens" : [ { "token" : "veloz", "position" : 2 }, { "token" : "zorro", "position" : 3 }, { "token" : "marrón", "position" : 4 } ] }