BULK API:格式错误的操作/元数据行[3],预计START_OBJECT但找到[VALUE_STRING]

bal*_*dam 9 elasticsearch elasticsearch-bulk-api

使用Elasticsearch 5.5,在发布此批量请求时收到以下错误,无法确定请求的错误.

"type": "illegal_argument_exception",
"reason": "Malformed action/metadata line [3], expected START_OBJECT but found [VALUE_STRING]"
Run Code Online (Sandbox Code Playgroud)

POST http:// localhost:9200/access_log_index/access_log/_bulk

{ "index":{ "_id":11} }
{  
   "id":11,
   "tenant_id":682,
   "tenant_name":"kcc",
   "user.user_name":"k0772251",
   "access_date":"20170821",
   "access_time":"02:41:44.123+01:30",
   "operation_type":"launch_service",
   "remote_host":"qlsso.quicklaunchsso.com",
   "user_agent":"Mozilla/5.0 (Linux; Android 7.0; LGLS775 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
   "browser":"",
   "device":"",
   "application.application_id":1846,
   "application.application_name":"Desire2Learn",
   "geoip.ip":"192.95.18.163",
   "geoip.country_code":"US",
   "geoip.country_name":"United States",
   "geoip.region_code":"NJ",
   "geoip.region_name":"New Jersey",
   "geoip.city":"Newark",
   "geoip.zip_code":7102,
   "geoip.time_zone":"America/New_York",
   "geoip.latitude":40.7355,
   "geoip.longitude":-74.1741,
   "geoip.metro_code":501
}
{ "index":{"_id":12} }
{  
   "id":12,
   "tenant_id":682,
   "tenant_name":"kcc",
   "user.user_name":"k0772251",
   "access_date":"20170821",
   "access_time":"02:50:44.123+01:30",
   "operation_type":"launch_service",
   "remote_host":"qlsso.quicklaunchsso.com",
   "user_agent":"Mozilla/5.0 (Linux; Android 7.0; LGLS775 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
   "browser":"",
   "device":"",
   "application.application_id":2341,
   "application.application_name":"Gmail",
   "geoip.ip":"192.95.18.163",
   "geoip.country_code":"US",
   "geoip.country_name":"United States",
   "geoip.region_code":"NJ",
   "geoip.region_name":"New Jersey",
   "geoip.city":"Newark",
   "geoip.zip_code":7102,
   "geoip.time_zone":"America/New_York",
   "geoip.latitude":40.7355,
   "geoip.longitude":-74.1741,
   "geoip.metro_code":501
}
Run Code Online (Sandbox Code Playgroud)

Neu*_*ino 13

您的资源对象必须在这样的单行上指定

post /test322/type/_bulk
{ "index": {} }
{ "name": "Test1", "data": "This is my test data" }
{ "index": {} }
{ "name": "Test2", "data": "This is my test data2" }
Run Code Online (Sandbox Code Playgroud)

我知道这看起来非常愚蠢和不直观,因为当您使用PUT或POST为非批量操作创建资源时,资源不必在一行上.

  • 此外,它希望最后一行结束。 (4认同)
  • 这至少为我节省了几个小时..谢谢;) (2认同)
  • 这与实际的[Elastic 示例](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/6.x/bulk_examples.html) 不匹配,但他们的文档是 -在某些地方——不是最佳的。 (2认同)
  • 这是一个如此奇怪的API,整个elasticsearch API似乎是由数据科学家而不是程序员编写的......我认为很难找到不太直观的API...... (2认同)
  • @Operator 这个特定的 API 仅支持 `ndjson` 而不是直接的 `json` - 请参阅 https://www.ndjson.org (2认同)

小智 2

您需要遵循批量格式才能成功执行此操作。它需要以下 JSON 结构:

action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
....
action_and_meta_data\n
optional_source\n
Run Code Online (Sandbox Code Playgroud)

如需进一步参考,请参阅此链接https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html