Elasticsearch?

Elasticsearch中你不能新增新的分析器或修改已有欄位。所以我們不得不修改的時候就建立一個新配置好的索引,然後將資料遷移到新的索引中。

如果你的應用中使用的是索引的名稱,你就需要更新你的應用。即使你覺得你的索引設計的已經很完美了,但是需求你懂的,我相信你一定也深有體會。所以最好的做法就是在你的應用中使用別名而不是索引。這樣你就可以在任何時候重建索引。別名的開銷很小,應當被廣泛的使用。

方法/步驟

操作別名的兩個方法:

_alias:單個操作

_aliases:多個操作,原子性的操作

Elasticsearch 九、別名alias

建立別名

curl -XPUT 'localhost:9200/dm_v1/_alias/dm'

curl -XPOST '; -d '

{

"actions" : [

{ "add" : { "index" : "dm_v1", "alias" : "dm_alias" } }

]

}'

Elasticsearch 九、別名alias

Elasticsearch 九、別名alias

刪除別名

curl -XPOST '; -d '

{

"actions" : [

{ "remove" : { "index" : "dm_v1", "alias" : "dm_alias" } }

]

}'

curl -XDELETE 'localhost:9200/dm_v1/_alias/dm_alias'

Elasticsearch 九、別名alias

刪除別名的同時新增別名到新的索引,該操作時原子性的,不用擔心存在別名沒有指向任何索引的瞬間

Renaming an alias is a simple remove then add operation within the same API. This operation is atomic, no need to worry about a short period of time where the alias does not point to an index:

curl -XPOST '; -d '

{

"actions" : [

{ "remove" : { "index" : "dm_v1", "alias" : "dm" } },

{ "add" : { "index" : "dm_v2", "alias" : "dm" } }

]

}'

Elasticsearch 九、別名alias

Elasticsearch 九、別名alias

查詢別名

通過別名查詢所指向的索引:

curl -XGET 'localhost:9200/_alias/dm'

curl -XGET 'localhost:9200/_alias/dm*'

查詢指向該索引下的所有別名:

curl -XGET 'localhost:9200/dm_v2/_alias/*'

Elasticsearch 九、別名alias

也可以通過head檢測別名是否存在

curl -XHEAD -i 'localhost:9200/_alias/dm'

curl -XHEAD -i 'localhost:9200/_alias/dm*'

curl -XHEAD -i 'localhost:9200/dm_v2/_alias/*'

Elasticsearch 九、別名alias

別名應該算是搞定啦,後面就是資料的遷移啦。

前面有一篇用hadoop操作ES的可以參考。

使用scan scroll來批量讀取,bulk API批量索引資料應該是一種高效的方法。後續可以再寫一個詳細的實現啦。That's all!

0 Hadoop 讀寫 Elasticsearch

相關問題答案