2017-04-21 40 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之类的东西。