2016-01-25 21 views
7

Sto cercando di sostituire i documenti su ES utilizzando NEST. Sto vedendo le seguenti opzioni disponibili.Aggiornamento cumulativo su ElasticSearch tramite NEST

Opzione # 1:

var documents = new List<dynamic>(); 

`var blkOperations = documents.Select(doc => new BulkIndexOperation<T>`(doc)).Cast<IBulkOperation>().ToList(); 
var blkRequest = new BulkRequest() 
{ 
    Refresh = true, 
    Index = indexName, 
    Type = typeName, 
    Consistency = Consistency.One, 
    Operations = blkOperations 
}; 
var response1 = _client.Raw.BulkAsync<T>(blkRequest); 

Opzione # 2:

var descriptor = new BulkDescriptor(); 
foreach (var eachDoc in document) 
{ 
    var doc = eachDoc; 
    descriptor.Index<T>(i => i 
     .Index(indexName) 
     .Type(typeName) 
     .Document(doc)); 
} 
var response = await _client.Raw.BulkAsync<T>(descriptor); 

Così qualcuno può dirmi che uno è migliore o qualsiasi altra opzione per fare gli aggiornamenti di massa o elimina utilizzando NEST?

risposta

3

si passa la richiesta alla rinfusa per la ElasticsearchClient cioè ElasticClient.Raw, quando si dovrebbe essere di passarlo a ElasticClient.BulkAsync() o ElasticClient.Bulk() che può accettare un tipo di richiesta di massa.

utilizzando BulkRequest o BulkDescriptor sono two different approaches that are offered by NEST for writing queries; il primo utilizza una sintassi Initializer per la creazione di un oggetto richiesta mentre il secondo viene utilizzato all'interno dell'API Fluorescente per creare una richiesta utilizzando espressioni lambda.

Nel tuo esempio, BulkDescriptor viene usato al di fuori del contesto del API fluente, ma entrambi BulkRequest e BulkDescriptor attrezzo IBulkRequest quindi può essere passato a ElasticClient.Bulk(IBulkRequest).

Per quanto riguarda il quale utilizzare, in questo caso non importa quale preferisci.

+0

Grazie, Russ Cam per il tuo commento. Ha senso che ho usato BulkDescriptor. hai qualche idea su come eseguire il rollback se uno qualsiasi degli aggiornamenti di massa fallisce? – Sasi

+0

Vuoi dire ripristinare tutti gli aggiornamenti in un'unica richiesta? In breve, non è possibile poiché ogni aggiornamento all'interno della richiesta in blocco è indipendente da altri, vale a dire che non è transazionale. È possibile riprovare le operazioni non riuscite, se necessario, ma nessun modo integrato per eseguire il rollback di –

+0

OK. Grazie ancora per la tua risposta. – Sasi

Problemi correlati