2016-04-26 6 views
0

brauchen Sie Ihre Hilfe, um das Verhalten der ElasticSearch Scripting-basierten Sortierung zu verstehen.Elasticsearch Multitypes Abfrage mit einem Skript seltsames Verhalten sortieren

Zunächst lassen Sie mich die Zuordnungen meiner Elasticsearch Typen ein:

{ 
"nestedDateType" : { 
     "properties" : { 
      "message" : { 
      "properties" : { 
       "date" : { 
       "type" : "date", 
       "format" : "dateOptionalTime" 
       } 
      } 
     } 
     } 
    }, 
    "nonNestedDateType" : { 
     "properties" : { 
      "date" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
      } 
     } 
    } 
} 

jetzt, was ich zu tun ist, wollen diese zwei Typen abzufragen und zu sortieren basierend auf dem Datum. Das Problem ist in NestedDateType, der Datumspfad ist "message.date" wobei in nonNestedDateType der Datumspfad "date" ist.

Ich verstehe, dass ich Scripting-basierte Sortierung verwenden muss, um dies zu tun. Das Skript, das ich erstellt habe, funktionierte jedoch nicht wie erwartet. Dies ist die Abfrage, die ich versuchte:

POST http://locahost:9200/index/nonNestedDateType,nestedDateType/_search?size=5000 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "or": [ 
       { 
        "range": { 
        "date": { 
         "gte": "2015-04-01" 
        } 
        } 
       }, 
       { 
        "range": { 
        "message.date": { 
         "gte": "2015-04-01" 
        } 
        } 
       } 
       ] 
      } 
      ] 
     } 
     } 
    } 
    }, 
    "sort": { 
    "_script": { 
     "script": "doc.containsKey('message') ? doc.message.date.value : doc.date.value", 
     "type": "number", 
     "order": "desc" 
    } 
    } 
} 

und diese waren das Ergebnis, das ich habe:

{ 
    "took": 60, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 15, 
    "max_score": null, 
    "hits": [ 
     { 
     "_index": "***", 
     "_type": "nonNestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "date": 1461634484557 
     }, 
     "sort": [ 
      1461634484557 
     ] 
     }, 
     { 
     "_index": "***", 
     "_type": "nonNestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "date": 1461634483528 
     }, 
     "sort": [ 
      1461634483528 
     ] 
     }, 
     { 
     "_index": "***", 
     "_type": "nestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "message": { 
      "date": 1461548078310 
      } 
     }, 
     "sort": [ 
      0 
     ] 
     } 
    ] 
    } 
} 

, wie Sie aus dem letzten Ergebnis vom Typ nestedDateType sehen können, ich die Art erwartet = 1461548078310 statt 0. Kann mir jemand erklären, was ich falsch gemacht habe?

festgestellt, dass einige Felder für die Vertraulichkeit entfernt wurden.

+0

return true Welche Version ES sind Ihre Laufen? – Val

+0

Ich benutze Version 1.6.2 – Lee

Antwort

0

kann ich es endlich funktioniert durch

script": "doc.containsKey('message') ? doc.message.date.value : doc.date.value" 

in

script": "doc.date.value == 0 ? doc['message.date'].value : doc.date.value" 

noch neugierig zu ändern, obwohl warum doc.containsKey ('message') nie