Elasticsearch:如何将数组首元素作为Gauss衰减函数的位置字段
解决方法
要使用数组字段addressDetails中第一个元素的location作为Gauss衰减函数的位置字段,你只需要在字段名中通过**数组下标0**来指定取第一个元素即可,Elasticsearch支持这种数组元素的访问方式。
修改后的查询代码
{ "query": { "function_score": { "functions": [ { "gauss": { "addressDetails.0.location": { // 指定数组第一个元素的location字段 "origin": { "lat": 19.07598366960883, "lon": 72.87765582092106 }, "offset": "10m", "scale": "10m" } }, "weight": 1 } ], // 可选:过滤掉无有效第一个地址的文档,避免无效计算 "filter": { "exists": { "field": "addressDetails.0.location" } } } } }
关键说明
- 原代码直接用
addressDetails.location时,Elasticsearch会遍历数组里所有location元素,计算每个元素的衰减分数后取最大值(默认score_mode为max);而指定addressDetails.0.location后,只会基于数组第一个元素的地理坐标计算衰减分数。 - 加入
filter里的exists条件是可选操作,目的是排除addressDetails数组为空、或第一个元素没有location字段的文档,避免这类文档参与分数计算时出现异常。
内容的提问来源于stack exchange,提问作者Sarvesh Jain
相关产品推荐
相关产品推荐

