Я использую Microsoft.Azure.Search версии 3.0.1,Azure SDK Поиск нулевой поле не установлен на Merge действия
Я пытаюсь следующее:
// subset of my index's fields
private class SyncFields
{
public string Id { get; set; }
public DateTimeOffset? ApprovedOn { get; set; }
public DateTimeOffset? IgnoredOn { get; set; }
}
public void Sync()
{
var sync = new SyncFields
{
Id = "94303",
ApprovedOn = null,
IgnoredOn = DateTime.UtcNow
};
var searchClient = new SearchServiceClient("xxxx",
new SearchCredentials("xxxx"));
searchClient.SerializationSettings.NullValueHandling = NullValueHandling.Include;
using (var client = searchClient.Indexes.GetClient("xxxx"))
{
client.SerializationSettings.NullValueHandling = NullValueHandling.Include;
var batch = IndexBatch.Merge<SyncFields>(new[] { sync });
client.Documents.Index<SyncFields>(batch);
}
}
Это не настройки ApprovedOn
null. Он игнорирует это. Если я установил ненулевое значение, оно его установит.
В соответствии с документацией here операция слияния обновляет поле, равное нулю. И на самом деле, если я сделаю этот запрос Http вручную с помощью JSON, это правда. Но SDK не обновляет поле (ы) до нуля. Что мне не хватает?
Thank you Bruce! Я не знал о нетипизированной версии (используя документ). Я буду использовать это вместо пользовательских преобразователей. Я также забыл о JsonPropertyAttribute. Можете ли вы сказать, почему не рекомендуется использовать JsonProperty в каждом поле? –
Производительность в основном. Если у вас очень широкая схема (думаю, 100 полей), отправка 100 единиц нулей для каждого документа в пакетном запросе индекса очень расточительна по пропускной способности сети. –