レコード割当ての置換

標準属性および管理値割当てを置換して、実行中のデータ・ドメインのレコードを更新できます。

ingestChangesupdateRecordsサブ操作には、データ・ドメインのレコードの割当てを置換するreplaceAssignments要素があります。

この要素では、標準属性割当てと管理値割当てを置換します。レコードの置換と同様に、新規割当てと一致する割当てがデータ・ドメイン内にまだ存在しない場合は、さらに割当てが追加されます。

割当ての置換と、置換対象の割当てを変更する他の操作を組み合せることはできません。

updateRecords操作で使用できるrecordSpecifier要素は1つのみです。この要素には、1つ以上のレコードを識別するEQL式が含まれている必要があります。updateRecords操作で複数の更新要素を組み合せる場合、すべての更新操作(追加、削除および置換)は recordSpecifier内のEQL式で識別されたレコードのみを対象に実行されることに注意してください。

Oracle Endeca ServerのDgraphプロセスでは、標準属性の追加時にタイプ確認が実行されるため、次の点に注意してください。
  • 既存の標準属性の値を追加する場合、新しい値が適切なタイプであることを確認してください。タイプが一致しないとエラーが発生します(たとえば、文字列redを整数の標準属性に割り当てようとした場合)。
  • 新規標準属性を作成および追加する場合、属性タイプを指定する必要があります。
  • 特にタイプ指定されていない標準属性は、デフォルトですべてstringタイプとして扱われます。

属性が複数選択に対応し、一部のレコードに対して複数の割当て値を保持している場合、replaceAssignments要素を使用すると、これらの割当てがすべて削除され、指定した1つの割当てが追加されます。

replaceAssignmentsリクエストでは、データ・ドメインの属性名を変更することもできます。詳細は、「標準属性の名前の変更」を参照してください。

重要: データ・ドメインでシステム作成された属性を変更する場合に、replaceAssignmentsを使用しないでください。たとえば、それを使用して、すべての属性についてシステムのmdex-property_IsSingleAssignプロパティをfalseに設定しないでください。そうようにすると、Studioでビューを正しく作成できないなど、アプリケーションに望ましくない影響を与える可能性があります。

トランザクションを開始するトランザクションWebサービスのリクエストの後に、ingestChangesリクエストを送信する場合、そのリクエストでは外部トランザクションIDを指定する必要があります。外部トランザクションが開始されていない場合、リクエストのID属性は省略する必要があります。

replaceAssignmentsリクエスト

updateRecordsサブ操作のreplaceAssignments要素は、個々の標準属性または管理値割当て(あるいはその両方)をデータ・ドメインのレコードから削除して、新しい割当て値で置き換えます。同じリクエストで1つ以上の割当てを置換できます。

個々の割当てを置換するには、次のようにします。
  • リクエストのrecordSpecifier要素にEQLフィルタを含めることにより、影響を受けるレコードを指定します。
  • これらのレコードについて、割当て値を置換する属性を指定します。
replaceAssignmentsリクエストの書式は次のとおりです。
<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:updateRecords>
            <ns:recordSpecifier>?</ns:recordSpecifier>
            <ns:replaceAssignments>
               <ns1:attribute name="?">?</ns1:attribute>
            </ns:replaceAssignments>
         </ns:updateRecords>
      </ns:ingestChanges>
   </soapenv:Body>
</soapenv:Envelope>
ここで、recordSpecifier要素に追加する文字列は、レコードを識別するEQL式です。
次の例に、このリクエストを示します。
<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:updateRecords>
            <ns:recordSpecifier>"price" > 5</ns:recordSpecifier>
            <ns:replaceAssignments>
               <ns1:attribute name="color">black</ns1:attribute>
            </ns:replaceAssignments>
         </ns:updateRecords>
      </ns:ingestChanges>
   </soapenv:Body>
</soapenv:Envelope>

この例では、color標準属性割当てのすべての値を、price属性の値が5よりも高いすべてのレコードを対象にblackで置き換えます。

前のサンプル・リクエストから返される成功時のingestChangesResponseは、次のようになります。
<ingest:ingestChangesResponse xmlns:ingest="http://www.endeca.com/MDEX/ingest/3/0">
    <ingest:numPropertiesCreated>0</ingest:numPropertiesCreated>
    <ingest:numRecordsAffected>7</ingest:numRecordsAffected>
    <ingest:numRecordsDeleted>0</ingest:numRecordsDeleted>
</ingest:ingestChangesResponse>

レスポンスのnumRecordsAffected要素は、7つのレコードが正常に変更されたことを示しています。