父子项的Elasticsearch路由问题 - 对象存储在不同的分片中

时间:2014-02-03 21:39:53

标签: elasticsearch

父母与子女子对象存储在不同的分片中

以下是我实现父对象和子对象的方法。

我为父对象设置了自定义路由参数。 添加子对象时指定父ID。

如果没有自定义路由参数,一切正常。但是,如果我将自定义路由参数指定给我的Parent对象,则子对象不会存储在同一个分片中,这会导致搜索查询失败。

有没有办法解决问题而不强制Child上的自定义路由值?

我正在使用ES 1.0 Beta2版本。

感谢名单

1 个答案:

答案 0 :(得分:4)

默认情况下,父文档使用其_id作为路由值,子文档使用parent的值作为其路由值。 parent的值与父级的_id相同,因此它们最终会出现在同一个分片上。

如果您在父级上使用自定义routing值,则需要在child上指定它,例如:

PUT /myindex/parent/1?routing=custom_val
{...}

PUT /myindex/child/2?parent=1&routing=custom_val
{...}

另一种方法是使用具有已配置路由值的别名:

PUT /myindex/_alias/myalias
{ "routing": "custom_value" }

然后您可以索引到别名,而不是在每个请求上指定routing

PUT /myalias/parent/1
{...}

PUT /myalias/child/2?parent=1
{...}