elasticsearch 資料遷移解決方案

2021-07-27 02:49:04 字數 2213 閱讀 8777

儘管可以增加新的型別到索引中,或者增加新的字段到型別中,但是不能新增新的分析器或者對現有的字段做改動。 如果你那麼做的話,結果就是那些已經被索引的資料就不正確, 搜尋也不能正常工作。

對現有資料的這類改變最簡單的辦法就是重新索引:用新的設定建立新的索引並把文件從舊的索引複製到新的索引。

字段_source的乙個優點是在elasticsearch中已經有整個文件。你不必從源資料中重建索引,而且那樣通常比較慢。

為了有效的重新索引所有在舊的索引中的文件,用 scroll

從舊的索引檢索批量文件 , 然後用bulkapi 把文件推送到新的索引中。

從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_v1my_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...