批量API的发布请求提供406的状态代码,即如何解决



我正在使用弹性搜索6.1版本我的数据正正确附加,我在请求结束时添加了" n"。

我的代码如下:

def insert_in_bulk(self, filee, rtype):
    U = urljoin(self.args.host, "/_bulk")
    body = []
    f = open(filee)
    for line in f:
        action = {
                'index' :{
                '_index' : self.args.index,
                '_type' : rtype,
                  }
                }
        item = {
            'word' : line.strip()
            }
        body.append(json.dumps(action))
        body.append(json.dumps(item))
    f.close()
    body = 'n'.join(body)+'n'
    success = False
    try:
        r = requests.post(U, data=body)
        self.log.info("after request")
        if r.status_code == 200:
            success = True
        r = r.json()
        self.log.info("inserted %s items of type = %s", self.args.index , rtype)
    except (SystemExit, KeyboardInterrupt): raise
    except:
          self.log.exception("during bulk index")
    if not success:
             self.log.error("failed to index records of type = %s", rtype)

我正在使用Python连接弹性搜索。

我从这个链接中得到答案JSON文件中的批量索引文档

我必须将标题传递给请求,作为应用程序/x-ndjson。

尽管问了很多时间问题,但是我想提供一个对我有用的解决方案,

def insert_in_bulk(self, filee, rtype):
    U = urljoin(self.args.host, "/_bulk")
    body = []
    f = open(filee)
    for line in f:
        action = {
                'index' :{
                '_index' : self.args.index,
                '_type' : rtype,
                  }
                }
        item = {
            'word' : line.strip()
            }
        body.append(json.dumps(action))
        body.append(json.dumps(item))
    f.close()

    payload = ""
    for l in body:
        payload = payload + f"{l} n"
    data = payload.encode('utf-8')
    r = requests.post(U, data=data, headers={"Content-Type": "application/x-ndjson"})
    print(r.text)

最新更新