首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSeach -按日期排序

ElasticSeach -按日期排序
EN

Stack Overflow用户
提问于 2013-08-23 22:22:07
回答 2查看 27.7K关注 0票数 8

我有一个弹性的搜索索引,我不能设置每个字段的映射,所以日期是字符串…

有人知道我会如何对字符串日期进行排序吗?

我已经看过_script了

代码语言:javascript
复制
{
    "query" : {
        ....
    },
    "sort" : {
        "_script" : {
            "script" : "doc['field_name'].value",
            "type" : "string",
            "order" : "asc"
        }
    }
}

但这是失败的,因为它是一个被分析的领域。

任何建议都是很棒的!

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-08-23 23:46:04

如果日期的格式是已知的,您可以将该格式添加到dynamic_date_formats (查看此link)设置。当你为一个新的字符串字段建立索引时,它将被转换为date类型,该类型可以用普通的方式排序。

示例:

创建不带属性的索引:

代码语言:javascript
复制
curl -XPUT http://localhost:9200/dates -d '
{
    "dates" : {
        "dynamic_date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy"],
        "properties" : {
        }
    }
}'

索引2文档:

代码语言:javascript
复制
curl -XPUT 'http://localhost:9200/dates/dates/1' -d '
{
    "arbitraryDate": "2013-01-01"
}'

curl -XPUT 'http://localhost:9200/dates/dates/2' -d '
{
    "arbitraryDate": "2012-01-01"
}'

如果您检查映射,您将看到该字段不是字符串:

代码语言:javascript
复制
curl -XGET 'http://localhost:9200/dates/_mapping'

结果:

代码语言:javascript
复制
{
  "dates": {
    "dates": {
      "properties": {
        "arbitraryDate": {
          "type": "date",
          "format": "dateOptionalTime"
        }
      }
    }
  }
}

现在,您可以轻松地进行排序:

代码语言:javascript
复制
curl -XGET 'http://localhost:9200/dates/_search' -d '
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "arbitraryDate": {
        "order": "asc"
      }
    }
  ]
}'
票数 15
EN

Stack Overflow用户

发布于 2022-01-26 06:59:49

你可以像下面这样使用Elasticearch的无痛脚本;

代码语言:javascript
复制
{
    "size": "100",
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "_script": {
                "type": "number",
                "script": {
                    "source": "String dateAsString = doc['field_name'].value; String dateformat = 'yyyy-MM-ddZ'; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateformat); return ZonedDateTime.parse(dateAsString, formatter).toInstant().toEpochMilli()"
                },
                "order": "desc"
            }
        }
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18405195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档