I am trying to update an existing indexed document. I have indexed tags, title and owners field. Now when the user changes the title, I need to find and update the document inside the index.
Should I update and replace the entire document or just the title field?
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); }
It just doesn't work. The code above generates a syntax error. Does anyone know the correct way to do this using the C# NEST client of ElasticSearch?
The script can update, delete, or skip modifying the document. The update API also supports passing a partial document, which is merged into the existing document. To fully replace an existing document, use the index API.
In Elasticsearch, to replace a document you simply have to index a document with the same ID and it will be replaced automatically. If you would like to update a document you can either do a scripted update, a partial update or both.
Upserts are "Update or Insert" operations. This means an upsert attempts to run your update script, but if the document does not exist (or the field you are trying to update doesn't exist), default values are inserted instead.
I have successfully updated existing items in my Elasticsearch index with NEST using a method like the following. Note in this example, you only need to send a partial document with the fields that you wish to be updated.
// 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) );
You can find more examples of ways to send updates in the NEST Update Unit Tests from the GitHub Source.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With