2016-05-26 9 views
5

Grazie al tutorial di FlashLight https://github.com/firebase/flashlight, questo è in qualche modo facile da eseguire fulltextsearch con Firebase.Come assicurare l'indicizzazione di ogni oggetto con Firebase FlashLight in un'istanza libera Bonsai di ElasticSearch

Tuttavia, se si mantiene l'istanza libera ES, è limitata in termini di accesso concorrenza, e quando si inizierà il nodo applicazione, viene visualizzato il seguente messaggio nel registro:

failed to index firebase/xxx/-KHLhdwGplb3lHWjm8RS: Error: Concurrent request limit exceeded. Please consider batching your requests, or contact [email protected] for help.

Come risolvi questo ?

risposta

9

Se si dispone di una serie di dati da indicizzare, l'applicazione della torcia elettrica chiederà ES di indicizzare ogni oggetto al volo, senza alcun vincolo di accesso alle risorse. Devi controllare/limitare l'accesso a questa risorsa condivisa con un Semaforo.

Installare il semaforo lib

npm i --save semaphore 

Modificare il file PathMonitor.js, e limitare l'accesso a risorse ES a 1

PathMonitor.prototype = { 
    _init: function() { 
     this.sem = require('semaphore')(1); 
     this.addMonitor = this.ref.on('child_added', this._process.bind(this, this._childAdded)); 
     this.changeMonitor = this.ref.on('child_changed', this._process.bind(this, this._childChanged)); 
     this.removeMonitor = this.ref.on('child_removed', this._process.bind(this, this._childRemoved)); 
    }, 
    ... 
    _index: function (key, data, callback) { 
     var that = this; 
     that.sem.take(function() { 
      that.esc.index({ 
       index: that.index, 
       type : that.type, 
       id : key, 
       body : data 
      }, function (error, response) { 
       that.sem.leave(); 
       if (callback) { 
        callback(error, response); 
       } 
      }.bind(that)); 
     }); 
    }, 
    ... 
} 

Questo non può essere richiesto in caso di piano a pagamento.

+0

Questo ha funzionato, fantastico. Grazie! – Simon

+0

@Anthony: ho fatto il tuo suggerimento e ho ancora lo stesso errore –