elasticsearch 弹性搜索如何查询多匹配或函数,elasticsearch,elasticsearch" /> elasticsearch 弹性搜索如何查询多匹配或函数,elasticsearch,elasticsearch" />

elasticsearch 弹性搜索如何查询多匹配或函数

elasticsearch 弹性搜索如何查询多匹配或函数,elasticsearch,elasticsearch,我将传递以下三个参数来运行查询,它们是: 查询-地名、描述或空 lat-一个地方的纬度或空 lon-一个地方的经度或空的经度 基于以上参数,我根据query得分得到项目的查询列表,然后计算结果与纬度、经度之间的距离 现在,我有了下面的脚本来基于查询和距离获取项 { "query": { "function_score": { "query": { "bool": { "mu

我将传递以下三个参数来运行查询,它们是:

  • 查询-地名、描述或空
  • lat-一个地方的纬度或空
  • lon-一个地方的经度或空的经度
基于以上参数,我根据
query
得分得到
项目的查询列表,然后计算
结果
纬度、经度
之间的距离

现在,我有了下面的脚本来基于
查询
距离
获取

{
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [{
                        "multi_match" : {
                            "query": "Lippo", 
                            "fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"]
                        }
                    }]
                }
            },
            "functions": [
                {
                    "gauss": {
                        "position": {
                            "origin":  "-6.184652, 106.7518749",
                            "offset": "2km",
                            "scale": "10km",
                            "decay": 0.33
                        }
                    }
                }
            ]
        }
    }
}
但问题是,如果
query
为空,则根本不会有结果。我想要的是,结果基于
查询
距离

有没有办法做到这一点?任何建议都将不胜感激。

将multi-match选项设置为
all
将允许您在查询为空时获得结果

例如:

{
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [{
                        "multi_match" : {
                            "query": "Lippo", 
                            "fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"],
                          "zero_terms_query" : "all"
                        }
                    }]
                }
            },
            "functions": [
                {
                    "gauss": {
                        "position": {
                            "origin":  "-6.184652, 106.7518749",
                            "offset": "2km",
                            "scale": "10km",
                            "decay": 0.33
                        }
                    }
                }
            ]
        }
    }
}

这对我来说已经够了。。但是,我最终删除了
函数来检查距离。我最终使用了简单的
查询
过滤器
。谢谢你,你也可以发布这个版本。