本文翻譯自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 } ] }