データソースから OpenSearch にデータを同期する際、ソースのフィールド値はインデックス作成前に変換が必要になる場合があります。たとえば、カンマ区切り文字列を配列に分割したり、HTMLタグを除去したりするケースです。データ処理プラグインは、データ同期時にこれらの変換を自動的に処理するため、OpenSearch の外部でデータを前処理する必要はありません。
データ処理プラグインは、構成済みのデータソースを介してデータを同期する場合にのみ利用可能です。API オペレーションまたは OpenSearch SDK を介してデータをアップロードする場合は、アップロード前にデータを処理してください。
前提条件
開始する前に、以下を確認してください。
ご利用の OpenSearch アプリケーション用に構成済みのデータソース
ソーステーブルと OpenSearch テーブル間のフィールドマッピングの定義
プラグインは、データソースを設定する際に構成し、アプリケーションスキーマを定義する際には構成しません。プラグインは、データソースが構成された後にのみ利用可能です。
データソースの制約
プラグインを構成する前に、以下の制約に注意してください。
ApsaraDB RDS および PolarDB: 1つの OpenSearch テーブルを複数のソーステーブルに関連付けることができます (データベースシャーディングとテーブルシャーディングをサポート)。
MaxCompute: 1つの OpenSearch テーブルは、1つの MaxCompute ソーステーブルのみに関連付けることができます。複数の MaxCompute ソーステーブルから同期するには、まずそれらを単一テーブルに結合してください。
利用可能なプラグイン
OpenSearch は、同期中のフィールド変換のために5つのプラグインを提供します。
| プラグイン | 変換タイプ | 機能 |
|---|---|---|
| JsonKeyValueExtractor | JSON抽出 | JSON形式のソースフィールドから、指定されたキーの値を抽出します。 |
| MultiValueSpliter | 値の分割 | デリミタを使用してソースフィールドを複数の値に分割します。 |
| KeyValueExtractor | キーと値の抽出 | キーと値のペアのソースフィールドからキーと値を抽出します。 |
| StringCatenateExtractor | 文字列の連結 | 複数のフィールドの値を単一の文字列に連結します。 |
| HTMLTagRemover | HTMLタグの除去 | ソースフィールド値からHTMLタグを削除します。 |
JsonKeyValueExtractor
JSON形式のソースフィールドから指定されたキーの値を抽出し、送信先フィールドにマッピングします。指定されたキーの値のみを抽出できます。
型の要件: 抽出された値の型は、送信先フィールドの型と一致する必要があります。型が一致しない場合、抽出された値はサイレントに破棄されます。
配列変換: 抽出された値が JSON 配列の場合、自動的に配列型のフィールド値に変換されます。
例
ソースフィールド値:
{"title": "the content", "body": "the content"}title キーを抽出するには、プラグインを title をターゲットにするように構成します。送信先フィールドは "the content" を受け取ります。
配列型の場合:
LITERAL_ARRAY source:
{"tags": ["a", "b", "c"]}INT_ARRAY source:
{"tags": [1, 2, 3]}
MultiValueSpliter
指定されたデリミタを使用してソースフィールド値を複数の値に分割し、その結果を配列型の送信先フィールドに書き込みます。
型の要件: 送信先フィールドは配列型である必要があります。
デリミタのサポート:
| デリミタタイプ | 指定方法 |
|---|---|
一般的な非表示文字 (例: \t) | 直接記述 |
| 珍しい非表示文字 | Unicode表記を使用 (例: \u001D) |
複数文字のデリミタ (例: ##, \t\t) | 直接記述 |
例
ソースフィールド値: 1,2,3
, をデリミタとして指定します。
構成の詳細については、「MultiValueSpliter の構成」をご参照ください。
KeyValueExtractor
キーと値のペアとしてフォーマットされたソースフィールドから、指定されたキーと値を抽出し、その結果を送信先フィールドにマッピングします。指定されたキーの値のみを抽出できます。デリミタは不要です。
型の要件: 抽出された値の型は、送信先フィールドの型と一致する必要があります。型が一致しない場合、値はサイレントに破棄されます。デリミタが抽出された値を区切る場合、送信先フィールドは配列型である必要があります。
重複キーの動作: 2つの同一のキーが存在する場合、2番目のキーの値のみが抽出されます。
例
ソースフィールド値: key1:value1,value2;key2:value3
構成:
キーと値のペアはセミコロン (
;) で区切られます:key1:value1,value2とkey2:value3を区別します。キーと値はコロン (
:) で区切られます:キーと値を区別します。値はカンマ (
,) で区切られます:キーの複数の値を区別します。
StringCatenateExtractor
複数の送信先テーブルフィールドの値を、指定された順序で単一の文字列に連結します。
型の要件: このプラグインは INT 型のフィールドを連結できません。LITERAL 型のフィールドを使用することを推奨します。
フィールドソース: フィールドはソーステーブルではなく、送信先テーブルから取得する必要があります。複数のフィールド名はカンマ (,) で区切ります。
システム変数: $table を使用して、現在のテーブル名を連結された文字列に含めます。$table は、テーブルシャーディングのワイルドカードが構成されている場合にのみ設定されます。
例
field1 と field2 をアンダースコア (_) デリミタで連結します。
HTMLTagRemover
ソースフィールド値からすべてのHTMLタグを削除します。送信先フィールドはプレーンテキストコンテンツを受け取ります。
例
ソースフィールド値: <div id="copyright">OpenSearch</div>
処理後、送信先フィールド値は OpenSearch になります。
制限事項
| 制約 | 詳細 |
|---|---|
| API および SDK のアップロード | プラグインは利用できません。アップロード前にデータを処理してください。 |
| MaxCompute データソース | 1つの OpenSearch テーブルは、1つの MaxCompute ソーステーブルのみにマップされます。 |
| StringCatenateExtractor | INT 型のフィールドは連結できません。 |
| JsonKeyValueExtractor および KeyValueExtractor | 抽出された値と送信先フィールドの型が一致しない場合、サイレントなデータ損失が発生します。 |
| プラグイン構成のタイミング | データソースが設定された後にのみ構成してください。スキーマ定義中は利用できません。 |