【问题标题】:Python ElasticSearch query errorPython ElasticSearch 查询错误
【发布时间】:2017-07-10 13:35:42
【问题描述】:

我已经使用映射查询在 ElasticSearch 中执行搜索,它可以正常工作,如下所示。

{
                "query": {
                    "bool" : {
                        "must" : {
                            "match_all" : {}
                        },
                        "filter" : {
                            "geo_distance" : {
                                "distance" : "{}mi".format(list_info.radius_b),
                                'location': {
                                    "lat": zip.lat,
                                    "lon": zip.lng
                                }
                            }
                        },
                    },
                },
                "sort" : [
                    {
                        "_geo_distance" : {
                            'location': {"lat": zip.lat,
                                        "lon": zip.lng},
                            "order" : "asc",
                            "unit" : "mi",
                            "mode" : "min",
                            "distance_type" : "sloppy_arc"
                        }
                    }
                ],
                "from": 0,
                "size": 0,
            }

但是,即使我添加了“术语”,我也遇到了错误:TransportError(400, u'parsing_exception', u'[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]')

{
                "query": {
                    "bool" : {
                        "must" : {
                            "match_all" : {}
                        },
                        "filter" : {
                            "geo_distance" : {
                                "distance" : "{}mi".format(list_info.radius_b),
                                'location': {
                                    "lat": zip.lat,
                                    "lon": zip.lng
                                }
                            }
                        },
                    },
                    "term" : { "status" : "approved" }
                },
                "sort" : [
                    {
                        "_geo_distance" : {
                            'location': {"lat": zip.lat,
                                        "lon": zip.lng},
                            "order" : "asc",
                            "unit" : "mi",
                            "mode" : "min",
                            "distance_type" : "sloppy_arc"
                        }
                    }
                ],
                "from": 0,
                "size": 0,
            }

【问题讨论】:

    标签: python elasticsearch


    【解决方案1】:

    您的新term 查询必须位于bool/filter 查询内:

    {
      "query": {
        "bool": {
          "must": {
            "match_all": {}
          },
          "filter": [
            {
              "geo_distance": {
                "distance": "{}mi".format(list_info.radius_b),
                "location": {
                  "lat": zip.lat,
                  "lon": zip.lng
                }
              }
            },
            {
              "term": {
                "status": "approved"
              }
            }
          ]
        }
      },
      "sort": [
        {
          "_geo_distance": {
            "location": {
              "lat": zip.lat,
              "lon": zip.lng
            },
            "order": "asc",
            "unit": "mi",
            "mode": "min",
            "distance_type": "sloppy_arc"
          }
        }
      ],
      "from": 0,
      "size": 0
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多