我需要能够用不同的路由值在不同的索引中索引相同的文档。
基本上,要解决的问题是能够从支付者和收款者的角度计算关于支付信息的复杂聚合。例如,“最近15天内支付/接收的付款按状态分组”
我想知道我们如何使用ElasticSearch bulk api来实现这一点。
有没有可能在不产生冗余的情况下在ndjson中实现这一点?例如,类似于以下内容:
POST _bulk
{ "index" : { "_index" : "test_1", "_id" : "1", "routing": "1234" } }
{ "index" : { "_index" : "test_2", "_id" : "1", "routing": "5678" } }
{ "field1" : "value1" }我查找了文档,但没有找到解释这一点的地方。
发布于 2019-09-11 14:47:26
由于只使用bulk API,所以每次都需要重复文档。
另一种方法是将文档大容量索引到第一个索引中,然后使用Reindex API为每个文档创建具有不同路由值的第二个索引。
POST _bulk
{ "index" : { "_index" : "test_1", "_id" : "1", "routing": "1234" } }
{ "field1" : "value1", "routing2": "5678" }然后,您可以使用第二个路由值(需要以某种方式存储在文档中)重新索引到第二个索引中
POST _reindex
{
"source": {
"index": "test_1"
},
"dest": {
"index": "test_2"
},
"script": {
"source": "ctx._routing = ctx._source.routing2",
"lang": "painless"
}
}这样,您只需使用批量API对数据编制一次索引,这将花费的时间大约是将所有文档加倍时的一半时间,然后通过利用Reindex API,所有数据将在内部重新编制索引(即,不会增加发送潜在大有效负载的网络延迟)
https://stackoverflow.com/questions/57879148
复制相似问题