我是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中可以做这样的事吗?如果可能,怎么样?
答案 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