Elasticsearch:parent/child 缺少 85% 的索引关系

Elasticsearch: parent/child missing 85% of indexed relationships

对于我的索引,我在 Elasticsearch

中使用 parent/child

所以我有以下内容:

我的映射如下:

PUT /esi
{
    "mappings": {
        "relation": {},
        "classification": {
            "_parent": {
                "type": "relation" 
            }
        },
        "inspection":
        {
            "_parent": {
                "type": "classification" 
            } 
        }
    }
}

我索引所有数据:关系、分类和检查。我对每个检查的索引如下:

PUT /esi/inspection/i20862?parent=c12277
{
    "date": "2015-06-06"
}

我用 Sense 检查我的索引,是的,所有类型都填充了正确数量的文档。现在奇怪的是:

我已经为 10581 项检查编制了索引。他们每个人都有一个 parent:我用上面的 parent 为每个检查编制了索引。 parent 存在。

现在,我使用以下命令进行检查:

POST /esi/inspection/_search
{
    "query":
    {
        "has_parent":
        {
            "parent_type": "classification",
            "query":
            {
                "match_all":
                {
                }
            }
        }
    }
}

结果:1556 而不是 10581

当我单独检查检验类型时,得到的结果是 10581(右)。但是1556是匹配到它的parent.

我不明白为什么索引后 parent 没有匹配项,而给定的 parent 存在。

我不得不将路由参数添加到grandchildren,所以:

PUT /esi/inspection/i20862?parent=c12277&routing=r595
{
    "date": "2015-06-06"
}

这确保 grandchildren parent/childs/grandchildren 存储在同一个分片中。

只有 parent/child,parent/child 总是存储在同一个分片中。当 child 为 parent 时,分片可以不同。这就是为什么你需要路由参数。

文档:https://www.elastic.co/guide/en/elasticsearch/guide/current/grandparents.html