mysql重建索引,Elasticsearch 2.3.0 重建索引

 2023-10-08 阅读 18 评论 0

摘要:2019獨角獸企業重金招聘Python工程師標準>>> 重建索引是2.3.0新增加的接口。這個接口是實驗性質的,在未來有可能會改變。 mysql重建索引。重建索引的最基本的功能是拷貝文件從一個索引到另一個索引,例如: POST /_reindex {"source": {

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

重建索引是2.3.0新增加的接口。這個接口是實驗性質的,在未來有可能會改變。

mysql重建索引。重建索引的最基本的功能是拷貝文件從一個索引到另一個索引,例如:

POST /_reindex
{"source": {"index": "secisland"},"dest": {"index": "new_secisland"}
}

返回的內容如下:

{"took" : 639,"updated": 112,"batches": 130,"version_conflicts": 0,"failures" : [ ],"created": 12344
}

took:從開始到結束的整個操作的毫秒數。

索引重建暫停會怎樣?updated:已成功更新的文檔數。

created:成功創建的文檔數。

batches:拉回來從建索引的數量。

重建索引rebuild,version_conflicts:重建索引中版本沖突數的數量。

failures:所有索引失敗的數組。如果這是非空的,則請求將被中止。

? ? 由于_reindex是獲取源索引的快照,而且目標索引是不同的索引,隨意基本上不太可能產生沖突。在接口參數中可以增加dest來進行樂觀并發控制。如果version_type設置為internal會導致Elasticsearch盲目轉儲文件到目標索引,任何具有相同的類型和ID的文檔將被從寫。例如:

POST /_reindex
{"source": {"index": "twitter"},"dest": {"index": "new_twitter","version_type": "internal"}
}

elasticsearch特點,? ? 如果設置version_type為external將會導致Elasticsearch保護源索引的版本,如果在目標索引中有一個比源索引舊的版本,則會更新文檔。對于源文件中丟失的文檔在目標中也會被創建。

POST /_reindex
{"source": {"index": "twitter"},"dest": {"index": "new_twitter","version_type": "external"}
}

????設置op_type為create將導致_reindex在目標索引中僅創建丟失的文件。所有現有的文件將導致版本沖突。

POST /_reindex
{"source": {"index": "twitter"},"dest": {"index": "new_twitter","op_type": "create"}
}

? ? 正常情況下當發生沖突的時候_reindex過程將被終止,可以在請求體中設置?"conflicts": "proceed"?可以只進行計算。

POST /_reindex
{"conflicts": "proceed","source": {"index": "twitter"},"dest": {"index": "new_twitter","op_type": "create"}
}

? ? 可以通過向源添加一個類型或者增加一個查詢來限制文檔的數量,比如只復制用戶名為kimchy 的文檔。

POST /_reindex
{"source": {"index": "twitter","type": "tweet","query": {"term": {"user": "kimchy"}}},"dest": {"index": "new_twitter"}
}

? ? 在請求接口中可以列出源索引和類型,可以在一個接口中復制多個源。例如下面的例子將在twitter和blog索引中的tweet和post類型中拷貝數據,這包括twitter索引中的"tweet"和"post"類型,也包括blog索引中的"tweet"和"post"類型。如果需要更具體的文檔可以使用查詢。當id產生沖突的時候是沒有辦法處理的,因為執行的順序是隨機的,所以目標索引將無法確定應該保存哪些文檔。

POST /_reindex
{"source": {"index": ["twitter", "blog"],"type": ["tweet", "post"]},"dest": {"index": "all_together"}
}

????也可以通過設置大小來限制處理文檔的數量。這只會復制一個文件到new_twitter索引中。

本文由賽克 藍德(secisland)原創,轉載請標明作者和出處。

POST /_reindex
{"size": 1,"source": {"index": "twitter"},"dest": {"index": "new_twitter"}
}

????如果你想要復制特定的文檔,可以使用排序。排序會降低效率,但在某些情況下,它是有意義的。如果可能的話,可以選擇性的查詢來確定復制的大小和排序。下面將從twitter索引中復制10000文檔到new_twitter中。

POST /_reindex
{"size": 10000,"source": {"index": "twitter","sort": { "date": "desc" }},"dest": {"index": "new_twitter"}
}

????_reindex同時支持使用腳本來修改文檔。例如:

POST /_reindex
{"source": {"index": "twitter",},"dest": {"index": "new_twitter","version_type": "external"}"script": {"internal": "if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}"}
}

????可以修改的元字段包括_id、_type、_index、_version、_routing、_parent、_timestamp、_ttl。所以用腳本復制能力非常強大。

????默認情況下,如果_reindex可以設置文檔路由來進行路由保存除非是通過腳本進行了改變。你可以設置dest 參數來進行路由設置:

keep:設置在匹配的每一個路由上發送請求的路由。這個是默認設置。

discard:為每一個匹配發送的請求設置為空。

=<some text>:設置為每一個匹配的文本請求發送路由上的路由。例如,您可以使用以下要求復制所有文件從源索引為"company"等于"cat"的查詢中復制到目標索引,目標索引的路由設置為cat。

POST /_reindex
{"source": {"index": "source""query": {"match": {"company": "cat"}}}"dest": {"index": "dest","routing": "=cat"}
}

????默認情況下_reindex每次處理的大小為100。可以在源參數中用size參數來進行修改:

POST /_reindex
{"source": {"index": "source","size": 1500},"dest": {"index": "dest"}
}

URL參數:

????_reindex接口除了接收標準的參數例如pretty,還支持refresh, wait_for_completion, consistency, timeout參數。

在url參數中發送refresh會導致請求寫的所有索引都將被刷新。這個時候收到新的數據也被索引。

如果請求包含wait_for_completion = FALSE,Elasticsearch將進行執行前檢查后啟動請求,然后返回一個可用于任務API取消或得到任務的狀態,現在一旦請求完成任務就不見了,找任務的最終結果的唯一地方是在Elasticsearch日志文件中,這個問題將會在未來的版本中修復。

consistency控制每次寫請求必須多少份分片被響應。

timeout控制每個寫請求等待可用的分片的時間。

任務查看:

GET /_tasks/?pretty&detailed=true&actions=*reindex

返回的結果類似

{"nodes" : {"r1A2WoRbTwKZ516z6NEs5A" : {"name" : "Tyrannus","transport_address" : "127.0.0.1:9300","host" : "127.0.0.1","ip" : "127.0.0.1:9300","attributes" : {"testattr" : "test","portsfile" : "true"},"tasks" : {"r1A2WoRbTwKZ516z6NEs5A:36619" : {"node" : "r1A2WoRbTwKZ516z6NEs5A","id" : 36619,"type" : "transport","action" : "indices:data/write/reindex","status" : {    "total" : 6154,"updated" : 3500,"created" : 0,"deleted" : 0,"batches" : 36,"version_conflicts" : 0,"noops" : 0},"description" : ""}}}}
}

_reindex可以用來建立索引的時候同時也可以修改列的名稱,例如,源索引類型為:

POST test/test/1?refresh&pretty
{"text": "words words","flag": "foo"
}

可以通過_reindex來修改列的名稱,例如:

POST _reindex?pretty
{"source": {"index": "test"},"dest": {"index": "test2"},"script": {"inline": "ctx._source.tag = ctx._source.remove(\"flag\")"}
}

然后我們看一下test2的結構,可以看出flag字段名稱修改成了tag。

GET test2/test/1?pretty
{"text": "words words","tag": "foo"
}

賽克藍德(secisland)后續會逐步對Elasticsearch的最新版本的各項功能進行分析,近請期待。

轉載于:https://my.oschina.net/secisland/blog/682717

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/131759.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息