ここでは、addOrUpdateRecordsサブ操作について説明します。
addOrUpdateRecordsサブ操作では、レコードの初期ロードの完了後、いつでもデータ・ドメインに別のレコードを追加できます。
addOrUpdateRecordsは次のように動作します。
- 指定された主キー(レコード指定子)が現在のデータ・セットに存在しない場合、その主キーおよび指定された割当てを持つレコードが追加されます。このモードは、addRecordsサブ操作に似ています。
- 指定された主キーが現在のデータ・セットにすでに存在する場合、レコードが新しい割当てで更新されます。このモードは、updateRecordsサブ操作に似ています。
データ・ドメインを作成し、そのDgraphプロセスを起動して初期ロードされたレコード・セットを処理した後に別のレコードを追加する方法は、次のように初期ロードのシナリオとほぼ同じです。
- ingestChanges操作は、addRecordsサブ操作(この章の前のトピックで説明)またはaddOrUpdateRecordsサブ操作(このトピックで説明)のいずれかで使用します。
- 主キー属性の割当てを追加して、新規レコードを識別します。
- 初期ロード操作と同様に、新規レコードに対して存在しない属性が指定されると、標準属性が必要に応じて作成されます。標準属性のPDRでは、システムのデフォルト設定を使用します。
- 標準属性を複数割当てとして構成すると、レコードにその属性の複数の割当てを含めることができます。
- 同じリクエストで複数のレコードを追加できます。
- 同じingestChangesリクエストで他の既存レコードを更新するには、updateRecordsサブ操作を使用します。
- 追加されるレコードは、同じリクエストの他の操作には使用できません。
- 同じリクエストで他のレコードを削除するには、deleteRecordsサブ操作を使用します。
addOrUpdateRecordsリクエスト
addOrUpdateRecordsの基本構文は次のとおりです。
<ingestChanges>
<addOrUpdateRecords>
<recordSpecifier>
<attribute name="?" type="?">?</attribute>
</recordSpecifier>
<addAssignments>
<attribute name="?" type="?">?</attribute>
</ns:addAssignments>
</addOrUpdateRecords>
</ingestChanges>
変数の意味は次のとおりです。
- recordSpecifier要素には、主キー属性の名前および値が含まれています。主キー属性がすでに存在する必要があることに注意してください。
- addAssignments>要素には、レコードに割り当てられる属性の名前および値が含まれています。指定された属性が存在しない場合は、システムのデフォルト値を使用して作成されます。
たとえば、次のリクエストでは、2つの割当てを持つ1つのレコードをデータ・ドメインに追加しています。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://www.endeca.com/MDEX/ingest/3/0"
xmlns:ns1="http://www.endeca.com/MDEX/XQuery/2009/09">
<soapenv:Header/>
<soapenv:Body>
<ns:ingestChanges>
<ns:addOrUpdateRecords>
<ns:recordSpecifier>
<ns1:attribute name="partID">8345</ns1:attribute>
</ns:recordSpecifier>
<ns:addAssignments>
<ns1:attribute name="color">blue</ns1:attribute>
<ns1:attribute name="price">29.99</ns1:attribute>
</ns:addAssignments>
</ns:addOrUpdateRecords>
</ns:ingestChanges>
</soapenv:Body>
</soapenv:Envelope>
キー/値割当てで属性タイプ(price属性のタイプ、つまり mdex:doubleなど)を指定していないことに注意してください。この理由は、すべての属性がデータ・ドメインにすでに存在するため、初期作成時に割り当てられたタイプがすでにあるからです(特に指定がない場合は、デフォルトのstringタイプが使用されます)。割当て属性値のタイプは、属性のタイプに一致している必要があります。
注意: 外部トランザクションを開始するトランザクションWebサービスのリクエストの後に、ingestChangesリクエストを送信する場合、そのリクエストでは外部トランザクションIDを指定する必要があります。外部トランザクションが開始されていない場合、リクエストのID属性は省略する必要があります。