2016-03-31 15 views
0

alle Ich benutze Es2.0 Version. Ich möchte mein LogDate-Feld nach dem Datumstyp sortieren.Sortierung nach Datum Feld mit Bereich Filter

Unten ist mein Mapping:

 PUT test/_mapping/device 
    { 
"device" : { 
    "_routing": {"required": true}, 
    "properties" : { 
     "activityId" : {"type" : "long", "store" : true }, 
     "userId":{"type":"long","store":true}, 
     "calories":{"type":"float","store":true}, 
     "description":{"type":"string","store":true}, 
     "distance":{"type":"float","store":true}, 
     "duration":{"type":"long","store":true}, 
     "startTime":{"type": "date","format" : "yyyy-MM-dd HH:mm:ss"}, 
     "endTime":{"type": "date","format" : "yyyy-MM-dd HH:mm:ss"}, 
     "steps":{"type":"long","store":true}, 
     "offset":{"type":"long","store":true}, 
     "lightSleep":{"type":"long","store":true}, 
     "deepSleep":{"type":"long","store":true}, 
     "almostAwake":{"type":"long","store":true}, 
     "s1":{"type":"long","store":true}, 
     "s2":{"type":"long","store":true}, 
     "s3":{"type":"long","store":true}, 
     "s4":{"type":"long","store":true}, 
     "s5":{"type":"long","store":true}, 
     "s6":{"type":"long","store":true}, 
     "s7":{"type":"long","store":true}, 
     "s8":{"type":"long","store":true}, 
     "year":{"type":"long","store":true}, 
     "month":{"type":"long","store":true}, 
     "activityType":{"type":"string","store":true}, 
    "logDate":{"type": "date","format" : "yyyy-MM-dd", 
    "index": "not_analyzed"}, 
    "createdTime":{"type": "date","format" : "yyyy-MM-dd HH:mm:ss"} 
    } 
    } 
    } 

und meine Frage ist, dass ich auf bestimmten Datumsbereich LogDate Feld sortieren möchten.

GET test/device/_search 
    { 
    "size": 500, 
    "sort": [ 
    { 
     "logDate": { 
     "order": "asc" 
     } 
    } 
    ], 
    "fields": [ 
    "logDate" 
    ], 
    "query": { 
    "bool": { 
     "must": [ 
      { 
       "match": { 
        "userId": "305" 
       } 
      },{ 
       "range": { 

         "logDate": 
           { 
            "from": "2016-01-25", 
            "to":"2016-01-31" 

           } 
       } 
       } 
     ] 
     } 
     } 
     } 

Es zeigt mir nicht wie erwartet output.It mich 25-01 bis 28-02 zeigt das heißt, es ist nicht analyzinf Monat. Bitte Jungs helfen mir aus, ich bin seit letzter Nacht am ti geschlagen. Thanku sehr viel.

Antwort

0

Nach Elasticsearch 2.0 documentation arbeitet range Abfrage mit lte, lt, gt und gte jeweils nicht von und zu. So ändern Ihre Bereichsabfrage sollte Ihr Problem beheben:

"range": { 
    "logDate": 
     { 
      "gte": "2016-01-25", 
      "lte": "2016-01-31" 
     } 
} 

Auch haben Sie versucht, eine einfache and Abfrage statt der bool? Von Ihrer Beschreibung sind Sie nicht mit der von ES zurückgegebenen _score betroffen.

Elasticsearch quer vs filter documentation weist darauf hin, wenn query und filter verwendet werden sollten. Haben Sie versucht, eine filtered Abfrage (https://www.elastic.co/guide/en/elasticsearch/guide/master/_combining_queries_with_filters.html) zu verwenden?

GET /_search 
{ 
    "query": { 
     "filtered": { 
      "query": { "match": { "userId": "305" }}, 
      "filter": { 
       "range": { 
        "logDate": { 
         "gte": "2016-01-25", 
         "lte": "2016-01-31" 
        } 
       } 
      } 
     } 
    } 
} 
+0

Dank ... aber ich habe versucht, es auch mit lte & gte –

+0

ich noch einen Blick über Ihre Anfrage hatte und die Antwort aktualisiert - sieht aus wie 'filtered' Abfrage könnte besser sein für das, was Sie versuchen zu erreichen . Da ES nicht ** von ** und ** bis ** als Optionen für "Bereich" query/filter hat, sollten Sie bei 'lte' und' gte' bleiben. –

+0

gefilterte Abfrage wurde veraltet https://www.elastic.co/blog/better-query-execution-coming-elasticsearch-2-0 – Rahul

Verwandte Themen