将每个匹配的记录值传递给Elasticearch中的过滤器 [英] Pass each matched record value to filter in Elasticsearch
本文介绍了将每个匹配的记录值传递给Elasticearch中的过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于geo_distance
查询,我使用常量的距离值。我需要让它充满活力。所以我想将上面匹配的记录半径值传递给距离。
代码如下:
let searchRadius = '12KM'
query: {
bool: {
must: {
match: {
companyName: {
query: req.text
}
}
},
filter: {
geo_distance: {
distance: searchRadius,//here I want to pass doc['radius']
location: {
lat: parseFloat(req.lat),
lon: parseFloat(req.lon)
}
}
},
}
}
对于每条记录,我都有不同的半径值。我希望传递doc['radius']
而不是常量searchRadius
值。
我可以命中两个查询,然后迭代值,但这并不是最优的。有人能建议如何将每个记录值传递给地理距离筛选器吗?
推荐答案
我已根据this答案进行解析。
代码如下
query: {
bool: {
must: [
{
match: {
companyName: {
query: req.text
}
}
},
{
script: {
script: {
params: {
lat: parseFloat(req.lat),
lon: parseFloat(req.lon)
},
source: "doc['location'].arcDistance(params.lat, params.lon) / 1000 < doc['searchRadius'].value",
lang: "painless"
}
}
}
]
}
},
使用脚本查询,来自更多详细信息:
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/query-dsl-script-query.html
这篇关于将每个匹配的记录值传递给Elasticearch中的过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文