2016-06-01 13 views
0

Ich habe ein paar Felder, nach denen ich sortieren möchte, damit sie die gleiche Priorität bekommen.Elasticsearch sortiert nach mehreren Feldnamen

Derzeit meine Sortierung wie folgt aussieht:

"sort": [ 
    { 
    "stats.favoriteCount": { 
     "order": "desc", 
     "missing": 0 
    }, 
    "stats.likeCount": { 
     "order": "desc", 
     "missing": 0 
    } 
    } 
] 

Mein Problem dabei ist, dass favoriteCount immer zuerst behandelt werden, obwohl likeCount höhere Werte hat.

Also für 2 Dokumente, die haben:

1: {"stats.favoriteCount": 50, "likeCount": 0} 
2: {"stats.favoriteCount": 0, "likeCount": 70} 

Das erste Dokument die Sortier höher, da Elasticsearch übersetzt eingestuft werden würde: [50,0] und [0,70].

Kann ich diese zwei Felder irgendwie gleich behandeln?

Antwort

0

Ich habe Andrei Stefan's answer geändert (danke!) Dazu:

{ 
    "sort": { 
    "_script": { 
     "type": "number", 
     "script": "return max(doc['stats.favoriteCount'].value,doc['stats.likeCount'].value)", 
     "lang": "groovy", 
     "order": "desc" 
    } 
    } 
} 
1

Ich denke, Sie brauchen Skript Sortierung. Etwas wie folgt aus:

{ 
    "sort": { 
    "_script": { 
     "type": "number", 
     "script": "if (doc['stats.favoriteCount'].value>doc['stats.likeCount'].value) return doc['stats.favoriteCount'].value; return doc['stats.likeCount'].value;", 
     "lang": "groovy", 
     "order": "desc" 
    } 
    } 
} 
+0

Dank! Dies bewegte sich um eine Menge in die richtige Richtung, ich endete mit 'max (val1, val2)' – AlexD

+0

Ja, der 'max' Ansatz ist viel sauberer und schlanker :-). –

Verwandte Themen