父母与子女子对象存储在不同的分片中
以下是我实现父对象和子对象的方法。
我为父对象设置了自定义路由参数。 添加子对象时指定父ID。
如果没有自定义路由参数,一切正常。但是,如果我将自定义路由参数指定给我的Parent对象,则子对象不会存储在同一个分片中,这会导致搜索查询失败。
有没有办法解决问题而不强制Child上的自定义路由值?
我正在使用ES 1.0 Beta2版本。
感谢名单
答案 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
{...}