2016-03-31 21 views
0

皆私はEs2.0バージョンを使用しています。私は、LogDateフィールドを日付タイプに基づいた範囲でソートしたいと思っています。Rangeフィールドで日付フィールドをソート

以下は私のマッピングです:

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

と私のクエリは、私は日付の指定した範囲にLOGDATEフィールドをソートしたいということです。

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" 

           } 
       } 
       } 
     ] 
     } 
     } 
     } 

それは私に25から01 28から02へのすなわちを示す期待output.Itとして私を示していない、それはanalyzinf月ではありません。 昨夜からティに襲われてしまったのをお手伝いしてください.Tanku。

答えて

0

Elasticsearch 2.0 documentationによれば、rangeクエリはそれぞれlteltgtgteで動作する、しないからします。また

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

は、あなたがboolではなく、単純なandクエリを使用して試してみました:だから変えるあなたの範囲クエリは、あなたの問題を解決する必要がありますか? あなたの説明から、あなたはESによって返された_scoreには関心がありません。

弾性抽出quer vs filter documentationは、queryfilterを使用する必要があります。 filteredクエリ(https://www.elastic.co/guide/en/elasticsearch/guide/master/_combining_queries_with_filters.html)を使用してみましたか? filtered`クエリはあなたが達成しようとしている何のために良いかもしれない `のように見える -

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

おかげで...しかし、私はまた、私はあなたのクエリを介して別の顔を持っていたとの答えを更新し、LTE&GTE –

+0

でそれを試してみました。 ESは 'range'クエリ/フィルタのオプションとして** from **と** to **を持っていないので、' lte'と 'gte'を使うべきです。 –

+0

フィルタリングされたクエリは非推奨ですhttps://www.elastic.co/blog/better-query-execution-coming-elasticsearch-2-0 – Rahul

関連する問題