I unten Mapping in meinem Index haben:Sortieren Muttertyp, basierend auf einem Feld innerhalb einer Reihe von verschachtelten Objekt in Elasticsearch
{
"testIndex": {
"mappings": {
"type1": {
"properties": {
"text": {
"type": "string"
},
"time_views": {
"properties": {
"timestamp": {
"type": "long"
},
"views": {
"type": "integer"
}
}
}
}
}
}
}
}
"time_views" ist eigentlich ein Array, aber inneren Attribute nicht-Array.
Ich möchte meine Typ1-Datensätze basierend auf dem maximalen Wert des "views" -Attributs für jeden Typ1-Datensatz sortieren. Ich lese elasticsearch Sortier-Dokumentation, es hat Lösung für Anwendungsfälle, die Sortierung auf Feld (Single oder Array) von einzelnen verschachtelten Objekt basiert. aber was ich will ist anders. Ich möchte für jedes Dokument Maximalwert von „Ansichten“ wählen und die Dokumente auf der Grundlage dieser Werte sortieren
ich diese json Abfrage
gemacht{
"size": 10,
"query": {
"range": {
"timeStamp": {
"gte": 1468852617347,
"lte": 1468939017347
}
}
},
"from": 0,
"sort": [
{
"time_views.views": {
"mode": "max",
"nested_path": "time_views",
"order": "desc"
}
}
]
}
aber ich habe diesen Fehler
{
"error": {
"phase": "query",
"failed_shards": [
{
"node": "n4rxRCOuSBaGT5xZoa0bHQ",
"reason": {
"reason": "[nested] nested object under path [time_views] is not of nested type",
"col": 136,
"line": 1,
"index": "data",
"type": "query_parsing_exception"
},
"index": "data",
"shard": 0
}
],
"reason": "all shards failed",
"grouped": true,
"type": "search_phase_execution_exception",
"root_cause": [
{
"reason": "[nested] nested object under path [time_views] is not of nested type",
"col": 136,
"line": 1,
"index": "data",
"type": "query_parsing_exception"
}
]
},
"status": 400
}
als ich Wie oben erwähnt time_views ist ein Array und ich denke, dass dieser Fehler deswegen ist. sogar ich kann die Sortierung nicht basierend auf Array-Feld-Funktion verwenden, weil "time_views" kein primitiver Typ ist. Ich denke, meine letzte Chance ist eine benutzerdefinierte Sortierung durch Skripting schreiben, aber ich weiß nicht wie. Bitte sagen Sie mir meinen Fehler, wenn es möglich ist zu erreichen, was ich will, ansonsten geben Sie mir ein einfaches Skript Beispiel.
tnx :)