尝试发送 Elasticsearch 地理查询时不可散列的类型“dict”

ale*_*loy 3 python elasticsearch

我正在尝试通过以下代码片段从 ES 中获取一些地理数据:

result = es.search(
    index="loc",
    body={
        {
            "filtered" : {
                "query" : {
                    "field" : { "text" : "restaurant" }
                },
                "filter" : {
                    "geo_distance" : {
                        "distance" : "12km",
                        "location" : {
                            "lat" : 40,
                            "lon" : -70
                        }
                    }
                }
            }
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

然而,由于以下错误,查询未成功:

"lon" : -70
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)

location 字段正确映射到 geo_point 类型,查询取自官方示例。我编写查询的方式有问题吗?

mic*_*ael 5

您正在将 a 嵌套dict在 a 内set。删除外部花括号即可解决问题。该错误源于这样一个事实:集合、字典不能包含不可散列的集合,例如字典(感谢@Matthias)。

body=
        {
            "filtered" : {
                "query" : {
                    "field" : { "text" : "restaurant" }
                },
                "filter" : {
                    "geo_distance" : {
                        "distance" : "12km",
                        "location" : {
                            "lat" : 40,
                            "lon" : -70
                        }
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)