将时间戳转换为过滤日期

时间:2018-03-20 12:59:53

标签: elasticsearch

我是ElasticSearch的新手,我不会试图将以下MySQL查询转换为ElasticSearch中的等价物:

SELECT 
    * 
FROM 
    table 
WHERE 
    STR_TO_DATE(FROM_UNIXTIME(field1, '%d/%m/%Y'), '%d/%m/%Y') = IF(
        field2 LIKE '%/%/%', 
        STR_TO_DATE(field2, '%d/%m/%Y'), 
        STR_TO_DATE(FROM_UNIXTIME(field2, '%d/%m/%Y'), '%d/%m/%Y')
    )

在ElasticSearch中可以做这样的事吗?如果可能,怎么样?

1 个答案:

答案 0 :(得分:1)

在elasticsearch中,您可以在映射中预先定义日期字段的格式。带有格式的日期定义的An example如下:

PUT my_index
{
 "mappings": {
  "_doc": {
    "properties": {
       "date": {
          "type": "date",
          "format": "yyyy-MM-dd"
        }
     }
   }
 }
}

如果您可以使用此映射,则只需查询:

POST /my_index/_search
{ 
   "query" : {
       "term": {"field1": "field2"}
   }       


}

如果没有,您可以根据需要使用脚本格式化日期。
注意:我在这里发布一个例子,作为一种方式:

POST my_index/_search
{
 "query": {
    "bool" : {
        "must" : {
            "script" : {
                "script" : {
                    "source": "def formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); formatter.format(doc['field1'].value) == formatter.format(doc['field2'].value",
                    "lang": "painless"
                 }
            }
        }
    }
}

这是DateTimeFormatter的Painless reference