gpt4 book ai didi

sorting - Elasticsearch脚本:嵌套日期可以作为日期对象直接访问吗?

转载 作者:行者123 更新时间:2023-12-02 23:07:40 27 4
gpt4 key购买 nike

在我的ES数据中,有nestedparent日期字段。我需要在一个ES无痛脚本中使用这些日期。由于parent日期被视为time object,因此操作起来很容易。例如,要将parent日期doc['validFrom']转换为UNIX时间编号,我只使用:

doc['validFrom'].value.millis
但是,对于像 nested这样的 params._source['offers'][0].validFrom日期进行操作的情况则不同。这些日期以 String而不是 date的形式返回。所以我必须手动将它们解析为 date对象:
LocalDateTime.parse(params._source['offers'][0].validFrom), ZoneId.systemDefault()).toInstant().toEpochMilli()
这种手动的日期解析为脚本带来了额外的复杂性。在我看来,这也不利于性能。是否可以直接在Elasticsearch脚本中将 nested date field作为 date object进行访问而无需从String进行解析?
压力
数据示例:
[
{
"id": "1",
"rank": 8,
"validFrom": "1970-01-01T00:00:00"
"offers": [
{
"id": "777",
"rank": 12,
"validFrom": "2020-07-06T00:00:00" // !!! should take the date from here
}
]
},
{
"id": "2",
"rank": 35,
"validFrom": "2019-05-03T00:00:00" // !!! should take the date from here as offers are null
"offers": null
}
]
我的剧本
    "sort": [
{
"_script": {
"script": {
"source": "params._source.offers != null ? ZonedDateTime.of(LocalDateTime.parse(params._source['offers'][0].validFrom), ZoneId.systemDefault()).toInstant().toEpochMilli() : doc['validFrom'].value.millis",
"lang": "painless"
},
"type": "number",
"order": "asc"
}
}
]

最佳答案

这个问题与this one有关。
此处的主题是区分 doc_values _source 字段。
由于doc_values确实返回原始类型,因此您可以在日期字段上访问.millis。但是_source本身是一种JSON形式的,未经分析的 map ,因此不幸的是,您只能得到最初摄取的内容。
当您在性能上遇到问题时,建议将嵌套的validFrom提取到顶层,并称其为validFromOverride。这样,您的排序脚本逻辑复杂性将大大降低。
映射和文档结构不需要是不变的。

关于sorting - Elasticsearch脚本:嵌套日期可以作为日期对象直接访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63990875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com