/ / Ordine di aggregazione Elasticsearch per il miglior punteggio raggiunto - elasticsearch, aggregazione

Ordine di aggregazione Elasticsearch per punteggio di maggior successo - elasticsearch, aggregazione

Voglio ordinare i bucket da doc.score di top_hit. La mia attuale implementazione è sotto.

  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
}
}
}
}

Questo è sbagliato perché i bucket sono ordinati in base al loro punteggio più alto, non al loro punteggio più alto del documento source_priority. C'è un modo per risolvere questo problema?

risposte:

12 per risposta № 1

Ho avuto lo stesso problema e il modo in cui ho risolto era introdurre una sub-aggregazione sul punteggio docs. Quindi, nella mia aggregazione esterna, ho ordinato per nome l'aggregazione 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"
}
}
}
}
}
}

Ho seguito le indicazioni su questo link:

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