尝试发送Elasticsearch时无法散列的类型'dict'

时间:2019-05-20 18:19:40

标签: python api elasticsearch

我继续在Python中遇到以下错误

  

发生异常:TypeError不可散列的类型:'dict'

第92行

  "should": [],
  "must_not": []

这是查询字符串

res = es.search(
                scroll = '2m',
                index = "logstash-*",
                body = {
{
  "aggs": {
    "2": {
      "terms": {
        "field": "src_ip.keyword",
        "size": 50,
        "order": {
          "1": "desc"
        }
      },
      "aggs": {
        "1": {
          "cardinality": {
            "field": "src_ip.keyword"
          }
        }
      }
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  },
  "stored_fields": [
    "*"
  ],
  "script_fields": {},
  "docvalue_fields": [
    {
      "field": "@timestamp",
      "format": "date_time"
    },
    {
      "field": "flow.start",
      "format": "date_time"
    },
    {
      "field": "timestamp",
      "format": "date_time"
    },
    {
      "field": "tls.notafter",
      "format": "date_time"
    },
    {
      "field": "tls.notbefore",
      "format": "date_time"
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "gte": 1555777931992,
              "lte": 1558369931992,
              "format": "epoch_millis"
            }
          }
        }
      ],
      "filter": [
        {
          "match_all": {}
        }
      ],
      "should": [],
      "must_not": []
    }
  }
}
})

1 个答案:

答案 0 :(得分:0)

body的值是一个集合(没有键值的{ }是一个集合文字,例如{1,2}是一个集合)。在这个集合中,您有一个字典。

集合中的项目必须是可哈希的,而字典不是。 正如@Carcigenicate的评论所说,对于{{ }}的值,用{ }而不是body似乎是错字。

Elasticsearch documentation显示正文应该是字典。
有关python docs

中的集合的更多信息