2015-12-03 116 views
0

在elasticsearch中,我可以在查詢時將字符串強制轉換爲long值嗎?在查詢ElasticSearch數據時進行Casting

我有我的文檔中是這樣的: 「屬性」: { 「鑰匙」: 「年齡」, 「值」: 「23」 }, { 「鑰匙」:「名」 ‘值’:‘約翰’ }, ],

我想編寫一個查詢來獲取所有有年齡> 23。我需要的值轉換爲int的人這樣當鑰匙變老時我可以比較它。

上述文檔是一個非常特定於此問題的示例。

我將不勝感激您的幫助。

謝謝!

+0

你還可以分享你的映射,特別是'屬性'字段的映射嗎?你還有該數組中的任何其他屬性,其內容也可能是數字的(例如'height','weight'等)? – Val

回答

1

您可以使用腳本爲

POST /index/type/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "script": { 
      "script": "foreach(attr : _source['attributes']) {if (attr['key']=='age') { return attr['value'] > ageValue;} } return false;", 
      "params" : { 
       "ageValue" : 23 
      } 

     } 
     }, 
     "query": { 
     "match_all": {} 
     } 
    } 
    } 
} 

UPD:注意動態腳本應在elasticsearch.yml啓用。

另外,我想你可以通過重構文檔結構併爲年齡字段應用適當的映射來歸檔更好的查詢性能。

+0

謝謝!這解決了我的問題!我不會將它重構爲數字,因爲我希望文檔是通用的 - 這就是我選擇鍵值對方法的原因。 – Adn11

+0

@Adina,Elasticsearch文檔本質上是關鍵價值。您可以在同一類型的文檔中存儲不同的屬性集。 –

+0

感謝您的反饋。不過,我知道我通過一個odata API端點發布數據,所以我希望我的文檔能夠輸入。此外,我希望我的屬性能夠存儲任何內容(我以前從未想到過的屬性 - 年齡,眼睛顏色,頭髮顏色等),因此我選擇了此選項。 – Adn11