0

Ich habe elasticsearch-scrolltoend als Plugin zuvor verwendet, nach dem Upgrade auf 5.0 scheint das Plugin nicht zu funktionieren. Wie kann ich einen großen Datensatz mit elasticsearch 5.0 scannen und scrollen?Wie scanne und scrolle ich mit elasticsearch-js und elasticsearch 5.0

erhielt ich auch einen Fehler, wenn die Umsetzung in den elasticsearch-js docs zu verwenden versuchen:

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: [email protected]; line: 1, column: 457]" } }, "status": 400 }

Antwort

0

das nicht erkennen Token Antwort Fehler ist ein Fehler, der in 13.0.0-rc1 fixiert wurde - siehe this issue for reference

Wie für die Implementierung, heres how I did it without the elasticsearch-scrolltoend plugin

// 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; 

    }); 
    } 
Verwandte Themen