elastic search node.js客户端-路由错误

5hcedyr0  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(556)

我们在gcp上有弹性主持。当我试图简单地发布文档时,出现了一个错误。我正在使用他们的node.js包,遇到以下错误:

PS C:\Projects\foo> node --experimental-modules --unhandled-rejections=strict app.js
(node:19356) ExperimentalWarning: The ESM module loader is experimental.
(node:19356) ExperimentalWarning: Conditional exports is an experimental feature. This feature could change at any time
Posting to Elastic => 5f91dfb0c64004000aab6c9b
C:\Projects\foo\node_modules\@elastic\elasticsearch\lib\Transport.js:257
          const error = new ResponseError(result)
                        ^

ResponseError: Response Error
    at IncomingMessage.<anonymous> (C:\Projects\foo\node_modules\@elastic\elasticsearch\lib\Transport.js:257:25)
    at IncomingMessage.emit (events.js:323:22)
    at endReadableNT (_stream_readable.js:1204:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  name: 'ResponseError',
  meta: {
    body: { error: 'Routing Error. The path you have requested is invalid.' },
    statusCode: 404,
    headers: {
      'content-type': 'application/json;charset=utf-8',
      server: 'Jetty(9.4.30.v20200611)',
      'x-cloud-request-id': 'srCq9DMFQVWuGsdXxgWhjA',
      'x-content-type-options': 'nosniff',
      'x-found-handling-cluster': '[Removed]',
      'x-found-handling-instance': 'instance-0000000001',
      'x-frame-options': 'SAMEORIGIN',
      'x-request-id': 'a2696b33-e4dc-4dfc-a8b1-f7ec17906ff7',
      'x-runtime': '0.010689',
      'x-xss-protection': '1; mode=block',
      date: 'Mon, 09 Nov 2020 21:28:28 GMT',
      'content-length': '66'
    },
    meta: {
      context: null,
      request: [Object],
      name: 'elasticsearch-js',
      connection: [Object],
      attempts: 0,
      aborted: false
    }
  }
}

我的客户设置如下

const client = new Client({
        node: 'https://[REMOVED].ent-search.us-central1.gcp.cloud.es.io',
        auth: {
          apiKey: 'Bearer private-[REMOVED]'
        }
    });

然后我尝试将一个json文件作为数组发送到elastic。

client.helpers.bulk({
    datasource: posts,
    onDocument(doc) {
      return {
        create: {_index: 'my-index', _id: elasticPost.id}
      };
     }
   });

更新:
json名称必须为小写。例如:
不起作用:

{
   "Id":  123456
}

作品:

{
   "id": 123456
}

另一件事可能与需要elastic提供的cloud id有关,我不确定这是否也是必需的,但是小写允许我将文档直接上传到elastic中。

ffdz8vbo

ffdz8vbo1#

json名称必须为小写。例如:
不起作用:

{
   "Id":  123456,
   "userName": "Dave2118"
}

作品:

{
   "id": 123456,
   "username": "Dave2118"
}
3pmvbmvn

3pmvbmvn2#

我觉得你有一个太多了 create 在您返回的命令中 onDocument . 您可以返回的命令如下所述:
所以,去掉一个 create 层,它应该工作:

client.helpers.bulk({
 datasource: posts,
 onDocument(doc) {
  return {
    create: {_index: 'my-index', _id: elasticPost.id}
  };
 }
});

更新:
查看主机名 *.ent-search.* ,看起来你在用 elasticsearch 客户端尝试连接到企业搜索后端,这无法工作,因为后者不支持 _bulk 应用程序编程接口。
如果连接到appsearch后端,则无法使用 _bulk 端点(即。 client.helpers.bulk() ). 相反,您需要通过appsearch documents api添加文档。请随意分享更多关于你想要达到的目标的信息。

相关问题