Ich verwende Microsoft.Azure.Search Version 3.0.1Azure Search SDK null Feld nicht auf Merge Aktion gesetzt
Ich versuche folgendes:
// 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);
}
}
Dies ist keine Einstellungen ApprovedOn
auf null. Es ignoriert es. Wenn ich einen Wert ungleich Null einstelle, wird dieser Wert gesetzt.
Gemäß der Dokumentation here aktualisiert die Zusammenführungsoperation das Feld auf Null. Und in der Tat, wenn ich diese HTTP-Post-Anfrage manuell mit JSON mache, ist dies wahr. Das SDK aktualisiert das Feld (die Felder) jedoch nicht auf null. Was vermisse ich?
Danke Bruce! Ich war mir der untypisierten Version (mit dem Dokument) nicht bewusst. Ich werde das anstelle von benutzerdefinierten Konvertern verwenden. Ich hatte auch das JsonPropertyAttribute vergessen. Können Sie sagen, warum es nicht empfehlenswert ist, die JsonProperty in jedem Feld zu haben? –
Leistung hauptsächlich. Wenn Sie ein sehr weites Schema haben (denken Sie an 100 Felder), ist das Verschicken von 100 Nullen für jedes Dokument in einer Index-Stapelanforderung sehr verschwenderisch für die Netzwerkbandbreite. –