2014-10-28 62 views
0

獲取的分析數據我在elasticsearch以下類型(只是其中的一部分):正確類型在elasticsearch

"diff":[ 
    {"name":"state", 
     "oldValue":"online", 
     "newValue":"offline" 
    }, 
    {"name":"cost", 
     "oldValue":2000, 
     "newValue":5000 
    } 
] 

的DIFF類型是nameoldValuenewValue陣列。現在,oldValue可以包含字符串值和整數值。我想要分析的時間範圍從cost高於2000或時間範圍從state聯機。可以有數百個這樣的屬性。

問題是我可以只給一個類型oldValue和newValue,字符串或整數。

我應該如何解決這個問題?

回答

0

有沒有用的東西陣列測試了這個(因爲你沒有提到它的嵌套或對象),但我做了一個簡單的領域:

PUT /some_index 
{ 
    "mappings": { 
    "some_type": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "copy_to": "name.int" 
     }, 
     "name.int": { 
      "type": "integer", 
      "ignore_malformed": true 
     } 
     } 
    } 
    } 
} 

然後索引一些測試數據:

POST /some_index/some_type/1 
{"name":"2000"} 
POST /some_index/some_type/2 
{"name":"testing"} 
POST /some_index/some_type/3 
{"name":2000} 

和測試:

GET /some_index/some_type/_search 
{ 
    "query": { 
    "range": { 
     "name.int": { 
     "from": 1999 
     } 
    } 
    }, 
    "fields": ["name", "name.int"] 
} 

而一些更多的測試(針對該領域的 「版本」「):

GET /some_index/some_type/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     {"range": { 
      "name.int": { 
      "from": 1999 
      } 
     }}, 
     {"match": { 
      "name": "testing" 
     }} 
     ] 
    } 
    }, 
    "fields": ["name", "name.int"] 
}