ВЛОЖЕННЫЙ документ обновления, содержащий удаление

#c# #elasticsearch #nest

#c# #elasticsearch #гнездо

Вопрос:

мой вопрос заключается в следующем. У меня есть тип данных, который состоит из словаря.

 Data d = new Data();
d.Id = "1"
d.Items.Add("item1", "hello");
d.Items.Add("item2", "world");
  

Теперь я хочу удалить элемент с ключом item1.

 d.Items.Remove("item1");
Index.Update(d);
  

Мой метод обновления выглядит следующим образом:

 client.Update<Data>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(d)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );
  

Но элемент с ключом item1 все еще остается. Кто-нибудь знает, как я могу указать методу обновления удалить эту запись?

Ответ №1:

Обновление может произойти либо с помощью скрипта, либо с помощью обновленного документа. В вашем случае вы обновляете с помощью опции document, но вы указываете тип сценария в своем вызове, потому что вы используете Update<T> , а не Update<T,K> . Вы можете увидеть пример обновления скрипта в Nest Update с помощью Script API.

Попробуйте изменить свой код на следующий, и вы должны увидеть это обновление, как вы ожидаете.

 client.Update<Data, Data>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(d)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );
  

Вы даже можете просто отправить частичное обновление и обновить только Items раздел.

 var updateDocument = new System.Dynamic.ExpandoObject();
var newItems = new Dictionary<string, string>();
newItems.Add("item2","world");
updateDocument.Items = newItems;

client.Update<Data, object>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(updateDocument)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );
  

Надеюсь, это поможет.

Комментарии:

1. спасибо за быстрый ответ. Я попробовал оба (полный и частичный), но оба по-прежнему терпят неудачу: (

2. Я только что обновил второй пример, понял, что пропустил важную часть. Если это все еще не работает, у меня нет идей, так как это то, что я использую с успехом.

3. Нет, все еще не работает, может быть неправильная настройка в сопоставлении или что-то в этом роде, что может быть причиной?