У меня проблема, объекты были проиндексированы, но при поиске с помощью has_child ничего не возвращается.
Сопоставление:
Родитель:
$ curl -XGET 'http://localhost:9200/items/article/_mapping?pretty'
"items" : {
"mappings" : {
"article" : {
"_meta" : {
"model" : "..."
},
"_source" : {
"enabled" : false,
"includes" : [ ],
"excludes" : [ ]
},
"properties" : {
"content" : {
"type" : "string",
"store" : true,
"analyzer" : "app_standard",
"fields" : {
"transliterated" : {
"type" : "string",
"analyzer" : "transliteration"
},
"stemmed" : {
"type" : "string",
"analyzer" : "app_text_analyzer"
}
}
}
,...
}
}
}
}
Ребенок:
$ curl -XGET 'http://localhost:9200/items/comment/_mapping?pretty'
"items" : {
"mappings" : {
"comment" : {
"_meta" : {
"model" : "..."
},
"_parent" : {
"type" : "article"
},
"_routing" : {
"required" : true,
"path" : "article_id"
},
"_source" : {
"enabled" : false,
"includes" : [ ],
"excludes" : [ ]
},
"properties" : {
"article_id" : {
"type" : "long",
"store" : true
}
,...
}
}
}
}
Существуют как родительские, так и дочерние документы:
Родитель:
$ curl -XGET 'http://localhost:9200/items/article/110700879894'
результат:
{
"_index": "items",
"_type": "article",
"_id": "110700879894",
"_version": 1,
"found": true
}
Ребенок без маршрутизации терпит неудачу:
$ curl -XGET 'http://localhost:9200/items/comment/110700879894.110700879894'
результат:
{
"error": "RoutingMissingException[routing is required for [items]/[comment]/[110700879894.110700879894]]",
"status": 400
}
Ребенок с маршрутизацией:
$ curl -XGET 'http://localhost:9200/items/comment/110700879894.110700879894?parent=110700879894'
результат:
{
"_index": "items",
"_type": "comment",
"_id": "110700879894.110700879894",
"_version": 1,
"found": true
}
Но has_child ничего не находит:
$ curl -XGET 'http://localhost:9200/items/article/_search' -d '{
"query": {
"has_child": {
"type": "comment",
"query": {
"term": {
"article_id": "110700879894"
}
}
}
}
}'
результат:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
has_parent тоже:
$ curl -XGET 'http://localhost:9200/items/comment/_search' -d '{
"query": {
"has_parent": {
"type": "article",
"query": {
"match_all": {}
}
}
}
}'
результат:
{
"took": 232,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
Я предполагаю, что в индексировании было что-то подозрительное, отношение родитель-потомок не было установлено. Но с другой стороны, ребенок был найден с правильной маршрутизацией.
Или я просто делаю запрос неправильно.
Как я могу проверить, что является дочерними документами родителя?
Изменить
Запрос на индексацию:
PUT http://localhost:9200/_bulk
{"index":{"_index":"items","_type":"comment","_id":"110700879894.110700879894"}}
{"article_id":"110700879894",...}
Разве здесь не должно быть родителя или что-то в этом роде?