将日期转换为字符串弹性搜索

Convert date to string elastic search

我想从弹性日期中获取年份 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
                }
            }
        }
    }
}

它给了我例外 -

"No signature of method: java.lang.Long.substring() is applicable for argument types: (java.lang.Integer, java.lang.Integer) values: [0, 4]\nPossible solutions: toString(), toString(), toString(), toString(long, int)"

如果我可以选择将字段值日期转换为字符串而不更改我的实际映射类型,我会得到正确的值。所以请建议如何在弹性搜索查询中转换为字符串。 或者,如果有任何其他选项可以从日期中获取年份,那么也建议。

您收到的错误是因为字段值是 Long 而不是 String。但是,您也可以像这样直接访问 date 值:

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

脚本很简单doc['timeModified'].date.year。知道该字段的类型为 date,ES 公开了 .date 快捷方式,其中可以使用 .year 之类的东西。