更新について

ここでは、Endecaデータ・ドメインのレコードを増分的に更新する方法について説明します。

ingestChangesupdateRecordsサブ操作を使用して、次のタイプの増分更新を実行できます。

addOrUpdateRecordsサブ操作(この操作でも新しい割当てを使用して既存のレコードを更新できます)については、「初期ロード後のレコードの追加」で説明します。

更新の適用方法

標準属性を追加する場合、操作は新規標準属性(追加される標準属性)に対して次のように動作します。
  • 新規標準属性がすでにデータ・ドメインに存在するが、タイプが異なる場合、エラーがスローされて新規標準属性は追加されません。
  • 新規標準属性がすでにデータ・ドメインに存在し、同じタイプの場合、エラーはスローされず、何も行われません。
  • 新規標準属性が主キー属性で、同じ名前の管理属性がすでに存在する場合、エラーがスローされて新規標準属性は追加されません。

レコードを更新すると、デフォルトの順序が変更される可能性があることに注意してください。つまり、レコードの順序がA、B、C、Dの状態でレコードBを更新した場合、レコードA、C、Dの順序は変わりません。ただし、レコードBは更新の結果として移動され、B、A、C、DやA、C、B、Dなどの順序になることがあります。

単一割当て属性、つまりPDRのmdex-property_IsSingleAssigntrueに設定されている標準属性に、2番目の値は追加できません。colorの例で言えば、colorが単一割当て属性で、レコードにはすでに1つのcolor割当てが存在する場合、2番目のcolor割当てを追加しようとすると失敗します。

更新操作の順序

ingestChangesリクエストには、すべてのタイプの更新(レコードの削除、割当ての削除、ワイルドカード削除の割当ておよび割当ての追加)を含めることができます。このようなリクエストが実行される前に、一部の操作は各コンポーネント操作に分けられます。
  • レコードの更新は、割当ての追加、削除、ワイルドカード削除および置換に分けられます。
  • レコードの置換は、レコードの削除およびレコードの追加に分けられます。
  • 割当ての置換は、ワイルドカード削除および割当ての追加に分けられます。
これらの操作が分けられると、残りすべての操作がタイプ別にグループ化され、各グループは次の順序で処理されます。
  1. deleteRecordsリクエスト
  2. deleteAssignmentsリクエスト
  3. wildcardDeleteAssignmentsリクエスト
  4. addAssignmentsリクエスト
  5. addRecordsリクエスト

レコード属性または属性割当てがwildcardDeleteAssignmentsまたはdeleteAssignmentsのリストで指定され、 addAssignmentsのリストで再度指定されている場合、その属性割当ては削除され、同じトランザクションで再度追加されます。

同一のレコード、標準属性または割当てがいずれかの要素に指定されている場合、重複するエントリは無視されます。

標準割当ての名前を変更する場合、ingestChangesupdateRecords内には、この操作のみを含めることができます。(同じリクエストに別のupdateRecordsを追加して、他の更新を含めることはできますが、名前が変更される属性を対象にはできません。)

更新操作で影響を受けるレコード

ingestChangesResponsenumRecordsAffected要素は、ingestChanges操作によって影響を受ける(変更される)レコードの数を示します。

ただし、影響を受けるレコードは、実際には操作で変更されない可能性があります。最終的に出力レコードが入力レコードと同じになる操作では、レコードが影響されるものとしてマークされますが、変更はされません。影響のないこれらの操作タイプとしては、すでに存在する割当ての追加、存在しない割当ての削除、割当てのないレコード・プロパティに対するワイルドカード削除の実行、および割当ての削除に続く同じ割当ての追加があげられます。