2014-01-22 50 views
0

我有一個方面的統計查詢非常類似於此:Elasticsearch方面的統計查詢不正確的分組

Sum Query in Elasticsearch

但是,我key_field是一個日期。

我期待收到按完整key_field值[「2014-01-20」,「2014-01-21」,「2014-01-22」]分組的結果,但它似乎將關鍵字段當遇到「 - 」時。我收到的實際上是按[「2014」,「01」,「20」,「21」,「22」]分組的。

爲什麼它分裂我的鑰匙?

回答

1

您可能已使用standard分析器將您的key_field映射爲string類型。

這會將2014-01-20標記爲2014,0120

您可能想將日期索引爲date。您也可以將其作爲字符串進行分析而不用進行分析。

這裏有一個可運行的例子,你可以玩:https://www.found.no/play/gist/5eb6b8d176e1cc72c9b8

#!/bin/bash 

export ELASTICSEARCH_ENDPOINT="http://localhost:9200" 

# Create indexes 

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{ 
    "settings": {}, 
    "mappings": { 
     "type": { 
      "properties": { 
       "date_as_a_string": { 
        "type": "string" 
       }, 
       "date_as_nonanalyzed_string": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
    } 
}' 


# Index documents 
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d ' 
{"index":{"_index":"play","_type":"type"}} 
{"date":"2014-01-01T00:00:00.000Z","date_as_a_string":"2014-01-01T00:00:00.000Z","date_as_nonanalyzed_string":"2014-01-01T00:00:00.000Z","x":42} 
' 

# Do searches 

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d ' 
{ 
    "facets": { 
     "date": { 
      "terms_stats": { 
       "key_field": "date", 
       "value_field": "x" 
      } 
     }, 
     "date_as_a_string": { 
      "terms_stats": { 
       "key_field": "date_as_a_string", 
       "value_field": "x" 
      } 
     }, 
     "date_as_nonanalyzed_string": { 
      "terms_stats": { 
       "key_field": "date_as_nonanalyzed_string", 
       "value_field": "x" 
      } 
     } 
    }, 
    "size": 0 
} 
'