将每个匹配的记录值传递给 Elasticsearch 中的过滤器
Pass each matched record value to filter in Elasticsearch
对于 geo_distance
查询,我使用了一个常数值作为距离。我需要让它充满活力。所以我想将上面匹配的记录 radius 值传递给 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)
}
}
},
}
}
对于每条记录,我有不同的 radius 值。我想传递 doc['radius']
而不是常量 searchRadius
值。
我可以点击两个查询然后迭代值,但这不是最优的。谁能建议我如何将每个记录值传递给 geo_distance 过滤器?
我已经解决了 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
对于 geo_distance
查询,我使用了一个常数值作为距离。我需要让它充满活力。所以我想将上面匹配的记录 radius 值传递给 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)
}
}
},
}
}
对于每条记录,我有不同的 radius 值。我想传递 doc['radius']
而不是常量 searchRadius
值。
我可以点击两个查询然后迭代值,但这不是最优的。谁能建议我如何将每个记录值传递给 geo_distance 过滤器?
我已经解决了 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