儘管可以增加新的型別到索引中,或者增加新的字段到型別中,但是不能新增新的分析器或者對現有的字段做改動。 如果你那麼做的話,結果就是那些已經被索引的資料就不正確, 搜尋也不能正常工作。
對現有資料的這類改變最簡單的辦法就是重新索引:用新的設定建立新的索引並把文件從舊的索引複製到新的索引。
字段_source
的乙個優點是在elasticsearch中已經有整個文件。你不必從源資料中重建索引,而且那樣通常比較慢。
為了有效的重新索引所有在舊的索引中的文件,用 scroll
從舊的索引檢索批量文件 , 然後用bulk
api 把文件推送到新的索引中。
從elasticsearch v2.3.0開始, /docs-reindex.html[reindex api] 被引入。它能夠對文件重建索引而不需要任何外掛程式或外部工具。
批量重新索引
同時並行執行多個重建索引任務,但是你顯然不希望結果有重疊。正確的做法是按日期或者時間 這樣的字段作為過濾條件把大的重建索引分成小的任務:
get/old_index/_search?scroll=
1m }
},"sort"
: ["_doc"
], "size"
:1000
}
如果舊的索引持續會有變化,你希望新的索引中也包括那些新加的文件。那就可以對新加的文件做重新索引, 但還是要用日期類欄位過濾來匹配那些新加的文件。
在前面提到的,重建索引的問題是必須更新應用中的索引名稱。 索引別名就是用來解決這個問題的!
索引 別名 就像乙個快捷方式或軟連線,可以指向乙個或多個索引,也可以給任何乙個需要索引名的api來使用。別名 帶給我們極大的靈活性,允許我們做下面這些:
在後面我們會討論更多關於別名的使用。現在,我們將解釋怎樣使用別名在零停機下從舊索引切換到新索引。
有兩種方式管理別名:_alias
用於單個操作,_aliases
用於執行多個原子級操作。
在本章中,我們假設你的應用有乙個叫my_index
的索引。事實上,my_index
是乙個指向當前真實索引的別名。真實索引包含乙個版本號:my_index_v1
,my_index_v2
等等。
首先,建立索引my_index_v1
,然後將別名my_index
指向它:
put/my_index_v1 (1)
put/my_index_v1/_alias/
my_index (2)
建立索引my_index_v1
。
設定別名my_index
指向my_index_v1
。
你可以檢測這個別名指向哪乙個索引:
get/*/_alias/my_index
或哪些別名指向這個索引:
get/my_index_v1/_alias/*
兩者都會返回下面的結果:
}}}
然後,我們決定修改索引中乙個欄位的對映。當然,我們不能修改現存的對映,所以我們必須重新索引資料。 首先, 我們用新對映建立索引my_index_v2
:
put/my_index_v2}}
}}
然後我們將資料從my_index_v1
索引到my_index_v2
,下面的過程在 [reindex] 中已經描述過。一旦我們確定文件已經被正確地重索引了,我們就將別名指向新的索引。
乙個別名可以指向多個索引,所以我們在新增別名到新索引的同時必須從舊的索引中刪除它。這個操作需要原子化,這意味著我們需要使用_aliases
操作:
post/_aliases
}, }
]}
你的應用已經在零停機的情況下從舊索引遷移到新索引了。
tip即使你認為現在的索引設計已經很完美了,在生產環境中,還是有可能需要做一些修改的。
做好準備:在你的應用中使用別名而不是索引名。然後你就可以在任何時候重建索引。別名的開銷很小,應該廣泛使用。
Elasticsearch 搜尋資料
elasticsearch 修改資料 elasticsearch 搜尋資料 現在我們已經了解了基本知識,讓我們嘗試使用更真實的資料。我們提供了一些虛構的客戶銀行賬戶資訊,格式如下所示 curl localhost 9200 cat indices?v 響應 health status index u...
二 elasticsearch入門(資料)
程式中大多的實體或物件能夠被序列化為包含鍵值對的json物件,鍵 key 是字段 field 或屬性 property 的名字,值 value 可以是字串 數字 波爾型別 另乙個物件 值陣列或者其他特殊型別,比如表示日期的字串或者表示地理位置的物件。accounts 文件元資料 乙個文件不只有資料。...
elasticSearch修改資料
elasticsearch幾乎能實時提供資料操作和搜尋功能。預設情況下,從開始索引 更新 刪除資料到出現搜尋結果的時間可以認為需要一秒的時間。這是與sql等其他平台的重要區別,其中資料在事務完成後可以立即使用。在上節中我們給索引建立了乙個文件,命令為 put customer doc 1 prett...