2017-04-21 37 views
0

我想從最新彈性search.My映射獲得一年就像是 -轉換日期爲字符串彈性搜索

"timeModified": 
{ 
    "type": "date", 
    "format": "strict_date_optional_time||epoch_millis" 
} 

而且在彈性搜索我的數據存儲是 -

"timeModified": "2015-03-12T13:18:50.000+05:30" 

我想從date.When獲得一年我執行下面的查詢 -

{ 
    "query" : { 
     "match_all": {} 
    }, 
    "script_fields" : { 
     "left_field" : { 
      "script" : { 
       "inline": "doc.timeModified.value.substring(0, length)", 
       "params": { 
        "length": 4 
       } 
      } 
     } 
    } 
} 

這讓我異常 -

否方法的簽名:java.lang.Long.substring()是適用 爲參數類型:(java.lang.Integer中,java.lang.Integer中)的值:[0, 4] \ n可能的解決方案:的toString()的toString(),toString()方法, 的toString(長,INT)

如果我有選擇的字段值日期轉換爲字符串沒有改變我的實際映射類型,我得到正確的價值。所以請建議如何在彈性搜索查詢中轉換字符串。 或者如果有任何其他選項從日期獲得年份,那麼也建議。

+1

嘗試'doc ['timeModified']。date.year'獲得年份。 –

回答

2

你得到的錯誤是因爲字段值是Long而不是String。但是,您也可以直接通過做這樣的訪問date值:

{ 
    "query" : { 
     "match_all": {} 
    }, 
    "script_fields" : { 
     "left_field" : { 
      "script" : { 
       "inline": "doc.timeModified.date.getYear()" 
      } 
     } 
    } 
} 
1

的腳本如下doc['timeModified'].date.year一樣簡單。知道該字段的類型爲date,ES公開了.date快捷方式,可以使用.year之類的東西。