elasticsearch重建索引


1、重建索引

 

一個field的設置是不能被修改的,如果要修改一個Field,那么應該重新按照新的mapping,建立一個index,然后將數據批量查詢出來,重新用bulk api寫入index

 

批量查詢的時候,建議采用scroll api,並且采用多線程並發的方式來reindex數據,每次scoll就查詢指定日期的一段數據,交給一個線程即可

 

1.1如果說舊索引的名字,是old_index,新索引的名字是new_index,終端java應用,已經在使用old_index在操作了,難道還要去停止java應用,修改使用的indexnew_index,才重新啟動java應用嗎?這個過程中,就會導致java應用停機,可用性降低

 

java應用一個別名,這個別名是指向舊索引的,java應用先用着,java應用先用goods_index alias來操作,此時實際指向的是舊的my_index

 

PUT /my_index/_alias/goods_index

 

1.2新建一個index,調整其字段的類型

 

1.3使用scroll api將數據批量查詢出來

 

GET /my_index/_search?scroll=1m

{

    "query": {

        "match_all": {}

    },

    "sort": ["_doc"],

    "size":  1

}

 

1.4采用bulk apiscoll查出來的一批數據,批量寫入新索引

 

POST /_bulk

{ "index":  { "_index": "my_index_new", "_type": "my_type", "_id": "2" }}

{ "title":    "2017-01-02" }

 

反復循環,查詢一批又一批的數據出來,采取bulk api將每一批數據批量寫入新索引

 

1.5goods_index alias切換到my_index_new上去,java應用會直接通過index別名使用新的索引中的數據,java應用程序不需要停機,零提交,高可用

 

POST /_aliases

{

    "actions": [

        { "remove": { "index": "my_index", "alias": "goods_index" }},

        { "add":    { "index": "my_index_new", "alias": "goods_index" }}

    ]

}

 

12)直接通過goods_index別名來查詢,是否ok

 

GET /goods_index/my_type/_search

 

2、基於aliasclient透明切換index


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM