c# elasticsearch nest

c# - ¿Cómo actualizo un documento existente dentro del índice ElasticSearch usando NEST?



(3)

En realidad para Nest 2 es:

dynamic updateFields = new ExpandoObject(); updateFields.IsActive = false; updateFields.DateUpdated = DateTime.UtcNow; await _client.UpdateAsync<ElasticSearchDoc, dynamic>(new DocumentPath<ElasticSearchDoc>(id), u => u.Index(indexName).Doc(updateFields))

Estoy tratando de actualizar un documento indexado existente. He indexado etiquetas, titulo y campo de propietarios. Ahora, cuando el usuario cambia el título, necesito encontrar y actualizar el documento dentro del índice.

¿Debo actualizar y reemplazar todo el documento o solo el campo de título?

public void UpdateDoc(ElasticsearchDocument doc) { Uri localhost = new Uri("http://localhost:9200"); var setting = new ConnectionSettings(localhost); setting.SetDefaultIndex("movies"); var client = new ElasticClient(setting); IUpdateResponse resp = client.Update<ElasticsearchDocument, IndexedDocument>( d => d.Index("movies") .Type(doc.Type) .Id(doc.Id), doc); }

Simplemente no funciona. El código anterior genera un error de sintaxis. ¿Alguien sabe la forma correcta de hacerlo utilizando el cliente NEST C # de ElasticSearch?


He actualizado exitosamente los artículos existentes en mi índice de Elasticsearch con NEST usando un método como el siguiente. Tenga en cuenta que en este ejemplo, solo necesita enviar un documento parcial con los campos que desea actualizar.

// Create partial document with a dynamic dynamic updateDoc = new System.Dynamic.ExpandoObject(); updateDoc.Title = "My new title"; var response = client.Update<ElasticsearchDocument, object>(u => u .Index("movies") .Id(doc.Id) .Document(updateDoc) );

Puede encontrar más ejemplos de formas de enviar actualizaciones en las Pruebas de unidades de actualización de NEST de GitHub Source .


Para que Nest 2 actualice un POCO que ya incluye un campo de ID:

var task = client.UpdateAsync<ElasticsearchDocument>( new DocumentPath<ElasticsearchDocument>(doc), u => u.Index(indexName).Doc(doc));