使用python es.update()在ElasticSearch中更新文档时出错

时间:2015-06-09 03:53:16

标签: python elasticsearch kibana-4

我正在尝试使用以下命令使用Elasticsearch的默认python接口更新elasticsearch中的文档。

res = es.update(index='its', doc_type='vents', id=txid, body={"doc":{"f_vent" :{"b_vent":rx_buffer}}})

更新的文件如下所示。

{
  "_index": "its",
  "_type": "vents",
  "_id": "4752956038",
  "_score": null,
  "_source": {
    "ResponseTime": 0,
    "Session": "None",
    "Severity": "warn",
    "StatusCode": 0,
    "Subject": "Reporting Page Load Time",
    "Time": "Fri Jun 05 2015 12:23:46 GMT+1200 (NZST)",
    "Timestamp": "1433463826535",
    "TransactionId": "4752956038",
    "msgType": "0",
    "tid": "1",
    "f_vent": {
      "b_vent": "{\"ActiveTransactions\": 6, \"AppName\": \"undefined\", \"TransactionId\": \"4752956038\",  \"UserInfo\": \"Unknown\"}"
    }
  },
  "fields": {
    "_timestamp": 1433818222372
  },
  "sort": [
    1433818222372
  ]
}

我通过展开文档从Kibana4发现标签中复制了此内容。b_vent中的“交易ID”必须以f_vent.b_vent.TransactionId的形式进行访问。我怀疑这对我绘制关于事务ID的图表有一些限制。我尝试使用

res = es.update(index='its', doc_type='vents', id=txid, body={"doc":{"b_vent":rx_buffer}})

以便我可以使用b_vent.TransactionId但是在调用es.update()时出现以下错误。

 raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
RequestError: TransportError(400, u'MapperParsingException[object mapping for [events] tried to parse field [be_event] as object, but got EOF, has a concrete value been provided to it?]')

我做错了什么?我该如何解决这个问题?

这是b_vent几乎完整的结构。

"{
    \"ActiveTr\": 6,
    \"ErrorM\": \"None\",
    \"HError\": \"false\",
    \"HMPct\": 62,
    \"NHMPct\": 57,
    \"Parameter\": \"1433195852706\",
    \"ParameterD\": \"false\",
    \"ProcessCPU\": 1,
    \"Proxies\": \"None\",
    \"RStatusCode\": \"34500\",
    \"Severity\": \"info\",
    \"ThrWtTi\": -1,
    \"ThrWai\": 16,
    \"Timestamp\": \"TueJun0209: 58: 16NZST2015\",
    \"TxId\": \"316029416\",
    \"UserInfo\": \"Unknown\"
}"

它确实有一些奇怪的逃脱序列。我不确定他们为什么在那里。但json.loads()确实似乎解析了该文件。我不知道如何解决这个问题?

0 个答案:

没有答案