0

elasticsearch-scrolltoend之前是作为插件使用的,升级到 5.0 后插件似乎不起作用。如何使用 elasticsearch 5.0 扫描和滚动大型数据集?

尝试使用 elasticsearch-js 文档中的实现时,我也收到错误消息:

json { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "Failed to parse request body" } ], "type": "illegal_argument_exception", "reason": "Failed to parse request body", "caused_by": { "type": "json_parse_exception", "reason": "Unrecognized token 'DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAHKFnV6a2NabEh4VDZLQmdzUzY0Y2tpd0EAAAAAAAAByxZ1emtjWmxIeFQ2S0Jnc1M2NGNraXdBAAAAAAAAAcwWdXprY1psSHhUNktCZ3NTNjRja2l3QQAAAAAAAAHOFnV6a2NabEh4VDZLQmdzUzY0Y2tpd0EAAAAAAAABzRZ1emtjWmxIeFQ2S0Jnc1M2NGNraXdB': was expecting ('true', 'false' or 'null')\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@67ba4d99; line: 1, column: 457]" } }, "status": 400 }

4

1 回答 1

0

无法识别的令牌响应错误是已修复的错误13.0.0-rc1- 请参阅此问题以供参考

至于实现,这是我在没有 elasticsearch-scrolltoend 插件的情况下是如何做到的

  // methods in some ES6 class
  ...

  fetchStuff(min, max = min) {

    const body = new Bodybuilder();

    body.size(3);
    body.filter('range', 'timestamp', {
      gte: min,
      lte: max
    });

    return this.elasticsearch.search({
      index: 'my-alias',
      type: 'my-doc',
      body: body.build('v2'), // have not upgraded to newer bodybuilder package yet
      scroll: '15s'
    })
    .then((res) => this._scrollToEnd(res, []))
    .then((events) => {

      // sort by timestamp then _id
      events = _.sortBy(events, ['_.source.timestamp', '_id']);

      return events;

    });

  }

  _scrollToEnd(res, events) {
    return Promise.resolve().then(() => {

      events = events.concat(_.get(res, 'hits.hits', []));

      if (res.hits.total > events.length) {
        return this.elasticsearch.scroll({
          scrollId: res._scroll_id,
          scroll: '15s'
        })
        .then((res) => this._scrollToEnd(res, events));
      }

      return events;

    });
  }
于 2017-04-18T17:49:21.917 回答