在创建具有多位作者但仅属于11种不同出版物的子集的书籍索引时,我打算在单个节点上有11个索引分片。
显然我的映射的路由部分看起来像,
"book":{
"_routing":{
"required":true,
"path":"publication"
},....
publication
本身就是一个字符串,可以是11种不同的类型。
我的映射的settings
部分看起来像
body: {
settings: {
index: {
number_of_shards: 11,
number_of_replicas: 1
}
},....
我遇到的问题是,在查看publication
和{shard
的结果后,不同books/_status
的文档已在同一books/_segments
中编入索引,而某些分片显示为空{1}}查询。
我查看了reroute
API,但显然应该寻找其他问题。
在指定路由后,这种文档的不均等分布诱使我完全放弃routing
。
我使用的版本是0.90.5。
答案 0 :(得分:4)
路由并不保证分片上的所有项目都具有相同的路由密钥,它将确保共享路由密钥的所有文档都在同一个分片上。
Here is a good ES post about it
从底部引用:
这个碎片几乎肯定有其他文件 到用户123。路由确保特定路由的文档 值全部转到同一个碎片......但这并不意味着其他碎片 文档也不会路由到分片。