gpt4 book ai didi

datetime - 在Elasticsearch上查询最接近日期时间的文档的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 23:01:36 25 4
gpt4 key购买 nike

我需要检索具有与请求最接近的地理位置和日期时间的文档,因此我不是在寻找日期时间的匹配项,而是寻找最接近的日期和时间。我使用自定义脚本解决了该问题,但是我猜想可能会有更好的方法,类似于我根据位置和距离过滤地理位置的方法。

这是我的代码(在python中):

query = {
"query": {
"function_score": {
"boost_mode": "replace",
"query": {
"filtered": {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "10km",
"location" : json.loads(self.request.body)["location"]
}
}
}
},
"script_score": {
"lang": "groovy",
"script_file": "calculate-score",
"params": {
"stamp": json.loads(self.request.body)["stamp"]
}
}
}
},
"sort": [
{"_score": "asc"}
],
"size": 1
}

response = requests.get('http://localhost:9200/meteo/meteo/_search', data=json.dumps(query))

定制的calculate-score.groovy脚本包含以下内容:
abs(new java.text.SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm").parse(stamp).getTime() - doc["stamp"].date.getMillis()) / 60000

该脚本以文档日期时间与请求的日期时间之间的分钟数绝对差值形式返回分数。

还有其他方法可以做到这一点吗?

最佳答案

您应该可以使用function_score执行此操作。
您可以使用文档中提到的衰减函数为接近原始时间戳的文档提供更大的分数。以下是示例
其中scale=28800 mins20d

例:

put test
put test/test/_mapping
{
"properties": {
"stamp": {
"type": "date",
"format": "dateOptionalTime"
}
}
}
put test/test/1
{
"stamp":"2015-10-15T00:00"
}

put test/test/2
{
"stamp":"2015-10-15T12:00"
}


post test/_search
{
"query": {
"function_score": {
"functions": [
{
"linear": {
"stamp" : {
"origin": "now",
"scale": "28800m"
}
}
}
],
"score_mode" : "multiply",
"boost_mode": "multiply",
"query": {
"match_all": {}
}
}
}
}

关于datetime - 在Elasticsearch上查询最接近日期时间的文档的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345878/

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