に設定されていない私は、私は次のことをしようとしている、Azureの検索SDKヌルフィールドマージアクション
をMicrosoft.Azure.Searchバージョン3.0.1を使用しています:
// 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にします。それは無視されます。 null以外の値を設定した場合は、設定されます。
ドキュメントhereによると、マージ操作では、フィールドがnullに更新されます。実際、JSONを使ってこのHttp投稿要求を手動で作成すると、これは真です。しかし、SDKはフィールドをnullに更新していません。私は何が欠けていますか?
ありがとう、ブルース!私は型なしのバージョン(Documentを使用)を知らなかった。私はカスタムコンバータの代わりにそれを使用します。私はJsonPropertyAttributeについても忘れていました。すべてのフィールドでJsonPropertyを使用することをお勧めしない理由を教えてください。 –
主にパフォーマンス。スキーマが非常に広い場合(フィールド数は100)、索引バッチ要求内のすべてのドキュメントに100を送信すると、ネットワーク帯域幅が非常に浪費されます。 –