При исследовании проблемы в этом вопросе я заметил, что кажется быть ошибкой в Elasticsearch 2.1.
Я пропустил одно из критических изменений, или это настоящая ошибка?
С этой настройкой:
PUT /test_index
{
"mappings": {
"parent_doc": {
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
},
"town": {
"type": "string",
"index": "not_analyzed"
}
}
},
"child_doc": {
"_parent": {
"type": "parent_doc"
},
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
},
"age": {
"type": "integer"
}
}
}
}
}
POST /test_index/parent_doc/_bulk
{"index":{"_id":1}}
{"name":"Bob","town":"Memphis"}
{"index":{"_id":2}}
{"name":"Alice","town":"Chicago"}
{"index":{"_id":3}}
{"name":"Bill","town":"Chicago"}
POST /test_index/child_doc/_bulk
{"index":{"_id":3,"_parent":1}}
{"name":"Jill","age":5}
{"index":{"_id":4,"_parent":1}}
{"name":"Joey","age":3}
{"index":{"_id":5,"_parent":2}}
{"name":"John","age":2}
{"index":{"_id":6,"_parent":3}}
{"name":"Betty","age":6}
{"index":{"_id":7,"_parent":3}}
{"name":"Dan","age":1}
Когда я запускаю следующий запрос в ES 1.7.3, я получаю ожидаемый результат:
POST /test_index/parent_doc/_search
{
"size": 0,
"aggs": {
"towns": {
"terms": {
"field": "town"
},
"aggs": {
"parent_names": {
"terms": {
"field": "name"
},
"aggs": {
"child_docs": {
"children": {
"type": "child_doc"
}
}
}
}
}
}
}
}
результат (ES 1.7.3):
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0,
"hits": []
},
"aggregations": {
"towns": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Chicago",
"doc_count": 2,
"parent_names": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Alice",
"doc_count": 1,
"child_docs": {
"doc_count": 1
}
},
{
"key": "Bill",
"doc_count": 1,
"child_docs": {
"doc_count": 2
}
}
]
}
},
{
"key": "Memphis",
"doc_count": 1,
"parent_names": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Bob",
"doc_count": 1,
"child_docs": {
"doc_count": 2
}
}
]
}
}
]
}
}
}
Однако когда я запускаю тот же код в ES 2.1.0, я получаю следующее:
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0,
"hits": []
},
"aggregations": {
"towns": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Chicago",
"doc_count": 2,
"parent_names": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Alice",
"doc_count": 1,
"child_docs": {
"doc_count": 0
}
},
{
"key": "Bill",
"doc_count": 1,
"child_docs": {
"doc_count": 0
}
}
]
}
},
{
"key": "Memphis",
"doc_count": 1,
"parent_names": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Bob",
"doc_count": 1,
"child_docs": {
"doc_count": 0
}
}
]
}
}
]
}
}
}
Вот код, который я использовал:
http://sense.qbox.io/gist/70b2b39e6611a39480bd922804177e0e3d201f5a
"child_docs"
›"doc_count"
равны нулю в ES 2.1, но не равны нулю в 1.7.3. - person Sloan Ahrens   schedule 04.12.2015