【问题标题】:Wrong type of @types/elasticsearch SearchResponse@types/elasticsearch SearchResponse 类型错误
【发布时间】:2019-04-18 19:20:18
【问题描述】:

当我使用 @nestjs/elasticsearch 的 ElasticsearchService 时,响应的结果与 @types/elasticsearch 的类型 SearchResponse 不匹配,因为 SearchResponse 是一个对象,但我实际上得到了一个包含 SearchResponse 对象和 Http 状态代码的数组,确实有人知道如何关闭它吗?

例子:

[
  {
    ...,
    "aggregations": {
      "backendVersions": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": "1.0.0",
            "doc_count": 1
          }
        ]
      }
    }
  },
  200
]

【问题讨论】:

  • 你能发布一个你如何使用elasticsearch服务的例子吗?

标签: typescript elasticsearch http-status-codes nestjs


【解决方案1】:

@nestjs/elasticsearch 的 ElasticsearchService 用bindNodeCallback 包裹了es 客户端,在doc 中有说明。

所以这个:

client.search({
  index: 'my-index',
  body: { foo: 'bar' }
}, (err, body, statusCode, headers) => {
  if (err) console.log(err)
})

将被转换为一个 observable,它会发出一个值,其中包含回调中的 args 减去数组中的 err。

service.search({
  index: 'my-index',
  body: { foo: 'bar' }
}).subscribe(value => {
  console.log(value); // [body, statusCode, headers]
});

你不能关闭这个,但是你可以通过getClient()直接使用elasticsearch客户端:

const searchResponse = await service.getClient().search({
  index: 'my-index',
  body: { foo: 'bar' }
});

还要记住会有breaking changes in @elastic/elasticsearch [7.x]:

client.search({
  index: 'my-index',
  body: { foo: 'bar' }
}, (err, { body, statusCode, headers, warnings }) => {
  if (err) console.log(err)
});

【讨论】:

  • 感谢您的帮助 :) 您知道 ElasticsearchService.search() 和 ElasticsearchService.getClient().search() 之间的区别是什么,因为第一个我不能传递多个参数。我应该使用什么?
  • @Alexander491 你可以使用getClient 来获取解包的elasticsearch 客户端。因此,如果您想要不可观察的 API,请使用 getClient.search
猜你喜欢
  • 2018-02-08
  • 1970-01-01
  • 2015-05-05
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2023-03-14
  • 2018-10-15
相关资源
最近更新 更多