gpt4 book ai didi

elasticsearch - 如何将一个索引文档复制到elasticsearch中的另一个索引?

转载 作者:行者123 更新时间:2023-12-02 22:15:40 25 4
gpt4 key购买 nike

我创建了一个带有映射的新索引。其中存储了 500 000 个文档。

我想更改索引的映射,但在 Elasticsearch 中是不可能的。所以我创建了另一个具有新映射的索引,现在我正在尝试将文档从旧索引复制到新索引。

我正在使用扫描和滚动类型从旧索引中检索文档并复制到新索引。复制需要更多时间并且系统速度变慢。

下面是我正在使用的代码。

$client= app('elastic_search');
$params = [
"search_type" => "scan", // use search_type=scan
"scroll" => "30s", // how long between scroll requests. should be small!
"size" => 500000, // how many results *per shard* you want back
"index" => "admin_logs422",
"body" => [
"query" => [
"match_all" => []
]
]
];

$docs = $client->search($params); // Execute the search

$scroll_id = $docs['_scroll_id'];


while (\true) {

// Execute a Scroll request
$response = $client->scroll([
"scroll_id" => $scroll_id, //...using our previously obtained _scroll_id
"scroll" => "500s" // and the same timeout window
]
);

if (count($response['hits']['hits']) > 0) {
foreach($response['hits']['hits'] as $s)
{

$params =
[
'index' => 'admin_logs421',
'type' => 'admin_type421',
'id'=> $s['_id'],
'client' => [
'ignore' => [400, 404],
'verbose' => true,
'timeout' => 10,
'connect_timeout' => 10
],
'body' => $s['_source']
];

$response = app('elastic_search')->create($params);

}


$scroll_id = $response['_scroll_id'];
} else {
// No results, scroll cursor is empty. You've exported all the data
return response("completed");
}
}

最佳答案

你不应该编写那样的代码。有一些优秀的工具可以为您完成这项工作。

看看Taskrabbit's elasticdump完全按照您的意愿行事的实用程序。

elasticdump \
--input=http://localhost:9200/source_index \
--output=http://localhost:9200/target_index \
--type=data

或者您也可以非常轻松地利用 Logstash,如 this other answer 中所示

最后,由于您使用的是 Python,您还可以使用 elasticsearch-py reindex utility

关于elasticsearch - 如何将一个索引文档复制到elasticsearch中的另一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com