每个用户的elasticsearch伪造指数 - 更新时如何推断路由值?

时间:2015-10-29 16:19:21

标签: elasticsearch

根据文档建议使用fake index per user。 ES版本1.6.0有时无法按预期运行。

检查别名:

curl localhost:9200/testbig/_alias/<userId>
{"<indexname>":{"aliases":{"<userId>":{"filter":{"term":  
{"userId":"<userId>"}},"index_routing":"<userId>","search_routing":"<userId>"}}
}}

但是尝试更新文档:

curl -XPOST localhost:9200/<userId>/<type>/<id>/_update -d 
'{"doc":{"userId":"<userId>","field1":"val1"}}'

我得到了

{ "error": "ElasticsearchIllegalArgumentException[Alias [<userId>] has 
index routing associated with it [<userId>], and was provided with 
routing value [<DIFFERENTuserId>], rejecting operation]",
"status": 400 }

1 个答案:

答案 0 :(得分:0)

如果其他人遇到类似的问题,原因是:

如果您开始为每个用户使用实际的单独索引,则可以使用具有相同ID的记录,即

之类的路径
localhost:9200/userid1/type/id1
localhost:9200/userid2/type/id1

但是当userids只是别名时,它们当然对应于同一文档。因此,路由会在后续更新时发生冲突。