初期ロード後のレコードの追加

ここでは、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属性は省略する必要があります。