2015-01-26 2 views
4

Когда я делаю запрос как этотElasticsearch кардинальное отсортирован неправильно

curl -XGET "http://localhost:9200/log/travels/_search?pretty" -d '                 
{ 
    "aggs":{ 
     "travelers":{ 
      "terms":{ 
       "field":"traveler", 
       "shard_size":0, 
       "size":5, 
       "order":{ 
        "cities":"desc" 
       } 
      }, 
      "aggs":{ 
       "cities":{ 
        "nested":{ 
         "path":"cities" 
        }, 
        "aggs":{ 
         "city_count":{ 
          "cardinality":{ 
           "field":"cities.name" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
}' 

я получаю ответ, что это упорядоченный неправильно, как этот

"aggregations" : { 
    "travelers" : { 
     "doc_count_error_upper_bound" : 0, 
     "sum_other_doc_count" : 410, 
     "buckets" : [ { 
     "key" : "patrick", 
     "doc_count" : 9, 
     "cities" : { 
      "doc_count" : 10, 
      "city_count" : { 
      "value" : 3 
      } 
     } 
     }, { 
     "key" : "jonathan", 
     "doc_count" : 8, 
     "cities" : { 
      "doc_count" : 10, 
      "city_count" : { 
      "value" : 4 
      } 
     } 
     }, { 
     "key" : "yosef", 
     "doc_count" : 8, 
     "cities" : { 
      "doc_count" : 10, 
      "city_count" : { 
      "value" : 4 
      } 
     } 
     }, { 
     "key" : "mark", 
     "doc_count" : 8, 
     "cities" : { 
      "doc_count" : 9, 
      "city_count" : { 
      "value" : 2 
      } 
     } 
     }, { 
     "key" : "mike", 
     "doc_count" : 7, 
     "cities" : { 
      "doc_count" : 9, 
      "city_count" : { 
      "value" : 5 
      } 
     } 
     } ] 
    } 
    } 

Я хотел это упорядоченный по числу городов ездили в. Если я изменю мощность на value_count, он упорядочивается правильно, но я не могу этого сделать, потому что он подсчитывает дубликаты.

Если вам нужна дополнительная информация, вы можете попросить.

ответ

6

Если вы пытаетесь сортировать по субэгрегации глубиной 2 уровня, синтаксис order немного отличается в соответствии с the documentation (см. Конец абзаца).

Более подробно это объясняется в this part Руководства по ElasticSearch.

В вашем случае, что-то вроде этого следует сделать трюк:

"order":{ "cities>city_count.value":"desc" } 

Надеется, что это помогает!

+0

Это помогло. Большое спасибо. –

+0

Хотелось бы, чтобы я голосовал за это несколько раз, спасли мне много головной боли, спасибо! –

Смежные вопросы