2014-10-06 11 views
9

Chcę zamówić łyżki według doc.score top_hit. Moja obecna implementacja znajduje się poniżej.Elasticsearch porządek agregacji według najwyższego wyniku trafienia

group_by_iid: { 
    terms: { 
     field: 'iid', 
     order: { max_score: 'desc' }, 
     size: 0 
    }, 
    aggs: { 
     max_score: { max: { script: 'doc.score' } }, 
     top_hit: { 
     top_hits: { 
      sort: [{ source_priority: { order: 'desc' } }], 
      size: 1 
     } 
     } 
    } 
    } 

Jest to niepoprawne, ponieważ segmenty są sortowane według ich najwyższego wyniku, a nie według najwyższego wyniku w dokumencie source_priority. Czy istnieje sposób na rozwiązanie tego problemu?

Odpowiedz

10

Miałem ten sam problem, a sposób, w jaki zdecydowałem, to wprowadzenie sub-agregacji na wynik docs. Następnie w mojej zewnętrznej agregacji zamówiłem nazwę agregacji max_score.

GET /my-index/my-type/_search 
{ 
    "query": { 
     "bool" : { 
     "should" : [ { 
      "match" : { 
      "searchTerm" : { 
       "query" : "style", 
       "type" : "boolean" 
      } 
      } 
     }, 
     { 
      "flt_field" : { 
      "searchTerm" : { 
       "like_text" : "style" 
      } 
      } 
     }] 
     } 
    }, 
    "aggs": { 
     "group_by_target_url": { 
      "terms": { 
      "field": "targetUrl", 
      "order": { 
       "max_score": "desc" 
      } 
      }, 
      "aggs": { 
      "max_score": { 
       "max": { 
       "script": "doc.score" 
       } 
      } 
      } 
    } 
    }  
} 

I po kierunkach na ten link:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

+11

Jeśli dokumenty zdarzy się, że jest „słabo” pola i chcesz agregacji metryk jak „max”, aby pracować z wynikiem obliczonym dzięki elastycznemu wyszukiwaniu, a nie dokumentowi, skrypt w agregacji powinien być "_score", a nie "doc.score". – Shadocko

+0

@Shadocko yes! to dość mylące. Dziękuję za komentarz. Próbuję tego samego przykładu i teraz działa. – Darby

+0

Czy wiesz, jak rozwiązać problem z partycjami? Moje pytanie jest tutaj https://stackoverflow.com/questions/46484351/elasticsearch-aggregation-order-by-top-hit-score-with-partitions – KingWu

Powiązane problemy