将每个匹配的记录值传递给 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