Javascript 有没有办法从elasticsearch索引中获取最近的位置值?
我有两个elasticsearch索引,一个带有userlocation,另一个是locationvalues 在响应的时间戳(+-10分钟)上,是否可以从locationvalues中获取距离userlocation最近的位置?我必须指定userlocation中的时间戳与locationvalue中的时间戳具有不同的值 时间戳的格式为毫秒!Javascript 有没有办法从elasticsearch索引中获取最近的位置值?,javascript,java,spring-boot,
elasticsearch,elastic-stack,Javascript,Java,Spring Boot,
elasticsearch,Elastic Stack,我有两个elasticsearch索引,一个带有userlocation,另一个是locationvalues 在响应的时间戳(+-10分钟)上,是否可以从locationvalues中获取距离userlocation最近的位置?我必须指定userlocation中的时间戳与locationvalue中的时间戳具有不同的值 时间戳的格式为毫秒! locationvalues每月有超过100k个元素,userlocation超过5000个元素。似乎您更希望提取报表,而不是单个Elasticsear
locationvalues每月有超过100k个元素,userlocation超过5000个元素。似乎您更希望提取报表,而不是单个Elasticsearch查询的结果。单凭一个查询是不可能实现的。您需要编写一个客户端应用程序,首先查询所有现有的“用户位置”,然后将每个“用户位置”的查询提交到位置值索引 Elasticsearch可以计算地理位置之间的距离,还可以根据地理距离对结果进行因子排序。Elasticsearch还支持数据数学,以便轻松查询日期范围,如“10分钟内”等 但Elasticsearch只能在数据以正确格式存储的情况下才能这样做。独立于创建Elasticsearch索引的人,映射看起来并不理想。经度和纬度信息不应存储为两个浮点字段,而应存储为一个字段 为了支持日期范围查询,您需要将时间戳存储为适当的时间戳(而不是那么长)。通过该参数,您可以控制计划发送到Elasticsearch的有效日期/时间格式(可以是多个格式字符串!)。Elasticsearch将不仅使用这些信息来验证时间戳,还将它们正确地转换为内部使用的epoch_millis表示来存储
即使不能改变现有映射以保持向后兼容性,也可以考虑在映射中添加新的“多字段”,以确保数据以适当的格式存储。但是,您需要获得写入权限(以及执行“按查询更新”请求的权限)才能首先修复索引映射。
能否请您用一些其他详细信息细化您的问题?您计划如何查询,每个用户位置一个查询?您使用的Elasticstack版本是什么?如何为数据编制索引?(您当前的映射不允许按预期进行查询。需要更改地理坐标和时间戳)。我正在等待你的输入,然后回答你的问题。我需要根据用户位置来估算污染数据。在“locationvalues”中,我有污染数据,对于“userlocation”中的每个值,我需要从“userlocation”中获取最近的值。我使用Elasticstack 7.10.1,我不能修改地理坐标和时间戳,因为我只是读取数据。谢谢你,@DanielSchneiter!"userlocation" : {
"aliases" : { },
"mappings" : {
"properties" : {
"_class" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"email" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"latitude" : {
"type" : "float"
},
"longitude" : {
"type" : "float"
},
"timestamp" : {
"type" : "long"
}
}
},
{
"locationvalues" : {
"aliases" : { },
"mappings" : {
"properties" : {
"LocationLat" : {
"type" : "double"
},
"LocationLong" : {
"type" : "double"
},
"Source" : {
"type" : "text"
},
"TimeStamp" : {
"type" : "date",
"format" : "epoch_millis"
},
"Value" : {
"type" : "double"
}
}
},