Я немного поиграл с ElasticSearch и обнаружил проблему при агрегировании.
У меня две конечные точки: / A и / B. В первом у меня есть родители для второго. Таким образом, один или несколько объектов в B должны принадлежать одному объекту в A. Следовательно, объекты в B имеют атрибут «parentId» с родительским индексом, созданным ElasticSearch.
Я хочу отфильтровать родителей в A по дочерним атрибутам B. Для этого я сначала фильтрую детей в B по атрибутам и получаю их уникальные родительские идентификаторы, которые позже буду использовать для получения родителей.
Отправляю такой запрос:
POST http://localhost:9200/test/B/_search
{
"query": {
"query_string": {
"default_field": "name",
"query": "derp2*"
}
},
"aggregations": {
"ids": {
"terms": {
"field": "parentId"
}
}
}
}
И получите такой ответ:
{
"took": 91,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "test",
"_type": "child",
"_id": "AU_fjH5u40Hx1Kh6rfQG",
"_score": 1,
"_source": {
"parentId": "AU_ffvwM40Hx1Kh6rfQA",
"name": "derp2child2"
}
},
{
"_index": "test",
"_type": "child",
"_id": "AU_fjD_U40Hx1Kh6rfQF",
"_score": 1,
"_source": {
"parentId": "AU_ffvwM40Hx1Kh6rfQA",
"name": "derp2child1"
}
},
{
"_index": "test",
"_type": "child",
"_id": "AU_fjKqf40Hx1Kh6rfQH",
"_score": 1,
"_source": {
"parentId": "AU_ffvwM40Hx1Kh6rfQA",
"name": "derp2child3"
}
}
]
},
"aggregations": {
"ids": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "au_ffvwm40hx1kh6rfqa",
"doc_count": 3
}
]
}
}
}
По какой-то причине отфильтрованный ключ возвращается в нижнем регистре, поэтому невозможно запросить родительский элемент для ElasticSearch.
GET http://localhost:9200/test/A/au_ffvwm40hx1kh6rfqa
Response:
{
"_index": "test",
"_type": "A",
"_id": "au_ffvwm40hx1kh6rfqa",
"found": false
}
Есть идеи, почему это происходит?
parentId
должен быть проанализирован с помощьюkeyword
анализатора или должен быть"index": "not_analyzed"
. - person Andrei Stefan   schedule 18.09.2015