elasticsearch - Elasticsearch如何查询多重匹配或函数

标签 elasticsearch

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

  • 查询 - 地名、描述或空,
  • lat - 某个地方或空旷地方的纬度,
  • lon - 某个地方的经度或空的经度

根据上述参数,我可以根据query分数查询items列表,然后计算结果之间的距离>纬度、经度

现在,我有以下脚本来根据查询距离获取项目

{
    "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 为空,则根本不会有结果。我想要的是,结果基于查询距离

有什么办法可以实现这个目标吗?如有任何建议,我们将不胜感激。

最佳答案

设置 zero_terms_query多重匹配选项 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
                        }
                    }
                }
            ]
        }
    }
}

关于elasticsearch - Elasticsearch如何查询多重匹配或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071367/

相关文章:

java - 在 Java 中更新集合项

regex - 使用Elasticsearch的邮件域的聚合计数

elasticsearch - 如何在我的nativescript应用程序中集成搜索

performance - 庞大服务器/服务器集群的Elasticsearch模糊匹配优化

elasticsearch - 未分析对分析字段的查询

elasticsearch - 如何设计索引以执行被我查看和被我查看的信息

json - 我需要在Windows OS上设置elasticsearch吗?

amazon-web-services - Elasticsearch AWS Connect 失败?

json - 通过命令行将ndjson导入Elasticsearch 7.2

elasticsearch - elasticsearch:如何将出现的第一个单词或短语排名更高