更新リクエストプロセッサ
Solr が受信したすべての更新リクエストは、更新リクエストプロセッサまたはURPと呼ばれるプラグインのチェーンを介して実行されます。
これは、たとえば、インデックス作成されるドキュメントにフィールドを追加したり、特定のフィールドの値を変更したり、受信ドキュメントが特定の基準を満たさない場合に更新を削除したりするのに役立ちます。実際、Solr の非常に多くの機能は更新プロセッサとして実装されているため、このようなプラグインがどのように機能し、どこで構成されているかを理解する必要があります。
URP の構造とライフサイクル
更新リクエストプロセッサは、1つ以上の更新プロセッサのチェーンの一部として作成されます。Solr は、不可欠な Solr 機能を有効にするいくつかの更新リクエストプロセッサで構成されるデフォルトの更新リクエストプロセッサチェーンを作成します。このデフォルトチェーンは、ユーザーが異なるカスタム更新リクエストプロセッサチェーンを構成して指定しない限り、すべての更新リクエストを処理するために使用されます。
更新リクエストプロセッサを説明する最も簡単な方法は、抽象クラスUpdateRequestProcessorの Javadocs を参照することです。すべての UpdateRequestProcessor には、UpdateRequestProcessorFactoryを拡張する対応するファクトリクラスが必要です。このファクトリクラスは、Solr がこのプラグインの新しいインスタンスを作成するために使用されます。このような設計には、2つの利点があります。
-
更新リクエストプロセッサは、1つのリクエストスレッドのみで使用され、リクエストが完了すると破棄されるため、スレッドセーフである必要はありません。
-
ファクトリクラスは、構成パラメータを受け入れ、リクエスト間で必要な状態を維持できます。ファクトリクラスはスレッドセーフである必要があります。
すべての更新リクエストプロセッサチェーンは、Solr コアのロード中に構築され、コアがアンロードされるまでキャッシュされます。チェーンで指定された各 UpdateRequestProcessorFactory
もインスタンス化され、solrconfig.xml
で指定された構成で初期化されます。
Solr が更新リクエストを受信すると、このリクエストに使用する更新チェーンが検索されます。チェーンで指定された各 UpdateRequestProcessor の新しいインスタンスが、対応するファクトリを使用して作成されます。更新リクエストは、対応するUpdateCommandオブジェクトに解析され、チェーンを介して実行されます。各 UpdateRequestProcessor インスタンスは、チェーン内の次のプラグインを呼び出す役割を担います。次のプロセッサを呼び出さずにチェーンをショートカットすることや、例外をスローしてそれ以上の処理を中止することさえできます。
単一の更新リクエストには、複数の新しいドキュメントや削除のバッチが含まれる可能性があり、そのため、UpdateRequestProcessor の対応する processXXX メソッドは、個々の更新ごとに複数回呼び出されます。ただし、単一のスレッドがこれらのメソッドをシリアルに呼び出すことが保証されています。 |
更新リクエストプロセッサーの設定
更新リクエストプロセッサーチェーンは、solrconfig.xml
でチェーン全体を直接作成するか、solrconfig.xml
で個々の更新プロセッサーを作成し、リクエストパラメータで全てのプロセッサーを指定することで実行時にチェーンを動的に作成することができます。
ただし、更新プロセッサーチェーンの設定方法を理解する前に、デフォルトの更新プロセッサーチェーンについて学ぶ必要があります。なぜなら、ほとんどのカスタムリクエストプロセッサーチェーンで必要となる重要な機能を提供しているからです。
デフォルトの更新リクエストプロセッサーチェーン
solrconfig.xml
で更新プロセッサーチェーンが設定されていない場合、Solr は自動的にデフォルトの更新プロセッサーチェーンを作成し、全ての更新リクエストに使用します。このデフォルトの更新プロセッサーチェーンは、以下のプロセッサー(順番通り)で構成されています。
-
LogUpdateProcessorFactory
- このリクエスト中に処理されたコマンドを追跡し、ログに記録します。 -
DistributedUpdateProcessorFactory
- 更新リクエストを適切なノードに分散する役割を担います。例えば、リクエストを正しいシャードのリーダーにルーティングしたり、リーダーから各レプリカに更新を分散したりします。このプロセッサーは、SolrCloud モードでのみ有効になります。 -
RunUpdateProcessorFactory
- 内部 Solr API を使用して更新を実行します。
これらの各プロセッサーは必須の機能を実行するため、通常、カスタムチェーンにはこれらのプロセッサーが全て含まれます。RunUpdateProcessorFactory
は通常、カスタムチェーンの最後の更新プロセッサーです。
カスタム更新リクエストプロセッサーチェーン
次の例は、solrconfig.xml
内でカスタムチェーンを設定する方法を示しています。
<updateRequestProcessorChain name="dedupe">
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">false</bool>
<str name="fields">name,features,cat</str>
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
上記の例では、"dedupe" という名前の新しい更新プロセッサーチェーンが、チェーン内に SignatureUpdateProcessorFactory
、LogUpdateProcessorFactory
、および RunUpdateProcessorFactory
を含めて作成されています。SignatureUpdateProcessorFactory
は、"signatureField"、"overwriteDupes" など、異なるパラメータでさらに設定されています。このチェーンは、Solr が名前、機能、cat フィールドの値を使用して署名を計算し、それを "id" フィールドとして使用することにより、ドキュメントの重複排除を実行するように設定できる方法の例です。お気づきのように、このチェーンは DistributedUpdateProcessorFactory
を指定していません。このプロセッサーは Solr が正しく動作するために不可欠であるため、Solr は RunUpdateProcessorFactory
の直前に DistributedUpdateProcessorFactory
を含まないチェーンに自動的に挿入します。
RunUpdateProcessorFactory
|
個々のプロセッサーをトップレベルプラグインとして設定する
更新リクエストプロセッサーは、solrconfig.xml
のチェーンとは独立して設定することもできます。
<updateProcessor class="solr.processor.SignatureUpdateProcessorFactory" name="signature">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">false</bool>
<str name="fields">name,features,cat</str>
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</updateProcessor>
<updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove_blanks"/>
この場合、SignatureUpdateProcessorFactory
のインスタンスが "signature" という名前で設定され、RemoveBlankFieldUpdateProcessorFactory
が "remove_blanks" という名前で定義されます。上記が solrconfig.xml
で指定されたら、次のように solrconfig.xml
の更新リクエストプロセッサーチェーンでそれらを参照できます。
<updateProcessorChain name="custom" processor="remove_blanks,signature">
<processor class="solr.RunUpdateProcessorFactory" />
</updateProcessorChain>
SolrCloud における更新プロセッサー
ユーザー管理のクラスターまたは単一ノードインストールでは、各更新はチェーン内の全ての更新プロセッサーを一度だけ通過します。ただし、SolrCloud では、更新リクエストプロセッサーの動作は特別な考慮が必要です。
SolrCloud の重要な機能は、リクエストのルーティングと分散です。更新リクエストの場合、このルーティングは DistributedUpdateRequestProcessor
によって実装され、このプロセッサーはその重要な機能のために Solr によって特別なステータスを与えられています。
SolrCloud クラスターでは、DistributedUpdateProcessor
より前 のチェーン内の全てのプロセッサーは、クライアントから更新を受信する最初のノードで実行されます。このノードがリーダーまたはレプリカとしてのステータスに関係なくです。次に、DistributedUpdateProcessor
は、更新を更新のための適切なシャードリーダー(または、クエリによる削除やコミットなど、複数のドキュメントに影響を与える更新の場合は複数のリーダー)に転送します。シャードリーダーは、トランザクションログを使用して 部分ドキュメント更新 を適用し、更新を全てのシャードレプリカに転送します。リーダーと各レプリカは、DistributedUpdateProcessor
後 にリストされているチェーン内の全てのプロセッサーを実行します。
たとえば、上記のセクションで見た "dedupe" チェーンを考えてみましょう。ノードAがshard1のリーダーをホストし、ノードBがshard2のリーダーをホストし、ノードCがshard2のNRTタイプのレプリカをホストする3ノードのSolrCloudクラスターが存在すると仮定します。更新リクエストがノードAに送信され、ノードB(更新がshard2に属しているため)に転送され、ノードCのレプリカに更新を分散すると仮定します。各ノードで何が起こるかを見てみましょう。
-
ノードA:
SignatureUpdateProcessor
(署名を計算し、それを "id" フィールドに配置します) 、次にLogUpdateProcessor
、最後にDistributedUpdateProcessor
を介して更新を実行します。このプロセッサーは、更新が実際にノードBに属していると判断し、ノードBに転送されます。更新はそれ以上処理されません。これは、次のプロセッサーであるRunUpdateProcessor
がローカルの shard1 インデックスに対して更新を実行し、shard1 と shard2 でデータが重複するのを防ぐために必要です。 -
ノードB: 更新を受信し、別のノードから転送されたことを認識します。更新は、ノードAで既に
SignatureUpdateProcessor
を通過しており、同じ署名計算を再度行うことは冗長になるため、直接DistributedUpdateProcessor
に送信されます。DistributedUpdateProcessor
は、更新が確かにこのノードに属していると判断し、ノードC上のレプリカに分散してから、チェーン内のRunUpdateProcessor
にさらに更新を転送します。 -
ノードC: 更新を受信し、リーダーによって分散されたことを認識します。更新は直接
DistributedUpdateProcessor
に送信されます。DistributedUpdateProcessor
は、いくつかの整合性チェックを実行し、チェーン内のRunUpdateProcessor
に更新をさらに転送します。
要約
-
DistributedUpdateProcessor
より前の全てのプロセッサーは、更新リクエストを受信する最初のノードでのみ実行されます。転送ノード(上記の例のノードAなど)であるか、リーダー(上記の例のノードBなど)であるかに関係なくです。これらを「プリプロセッサー」または単に「プロセッサー」と呼びます。 -
DistributedUpdateProcessor
より後の全てのプロセッサーは、リーダーノードとレプリカノードでのみ実行されます。転送ノードでは実行されません。このようなプロセッサーは「ポストプロセッサー」と呼ばれます。
前のセクションでは、updateRequestProcessorChain
が processor="remove_blanks, signature"
で設定されていることを確認しました。これは、このようなプロセッサーが #1 の種類であり、転送ノードでのみ実行されることを意味します。同様に、属性 "post-processor" を指定することで、#2 の種類として構成することもできます。
<updateProcessorChain name="custom" processor="signature" post-processor="remove_blanks">
<processor class="solr.RunUpdateProcessorFactory" />
</updateProcessorChain>
ただし、転送ノードでのみプロセッサーを実行することは、ロードバランサーを介してランダムにリクエストを送信することにより、SolrCloud クラスター全体で重複排除などのコストのかかる計算を分散する優れた方法です。そうしないと、コストのかかる計算がリーダーノードとレプリカノードの両方で繰り返されます。
カスタム更新チェーンのポストプロセッサーは、回復中のレプリカでは決して呼び出されない可能性があります
|
Atomic Update Processor Factory
AtomicUpdateProcessorFactory
が DistributedUpdateProcessor
より前の更新チェーンにある場合、チェーンへの入力ドキュメントは部分ドキュメントになります。
DistributedUpdateProcessor
は、アトミック更新 をリーダーノード上の完全なドキュメントに処理する役割を担っているため、転送ノードでのみ実行されるプリプロセッサーは部分ドキュメントでのみ操作できることを意味します。完全なドキュメントを処理する必要があるプロセッサーがある場合は、ポストプロセッサーとして指定するしかありません。
カスタムチェーンの使用
update.chain リクエストパラメータ
update.chain
パラメータは、solrconfig.xml
で設定されたカスタムチェーンを選択するために、任意の更新リクエストで使用できます。たとえば、前のセクションで説明した "dedupe" チェーンを選択するには、次のリクエストを発行できます。
curl "https://127.0.0.1:8983/solr/gettingstarted/update/json?update.chain=dedupe&commit=true" -H 'Content-type: application/json' -d '
[
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
},
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
}
]'
上記は、2つの同一のドキュメントを重複排除し、そのうちの1つのみをインデックス化する必要があります。
Processor & Post-Processor リクエストパラメータ
processor
および post-processor
リクエストパラメータを使用して、カスタム更新リクエストプロセッサーチェーンを動的に作成できます。複数のプロセッサーを、これら2つのパラメータのカンマ区切り値として指定できます。例えば
curl "https://127.0.0.1:8983/solr/gettingstarted/update/json?processor=remove_blanks,signature&commit=true" -H 'Content-type: application/json' -d '
[
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
},
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
}
]'
curl "https://127.0.0.1:8983/solr/gettingstarted/update/json?processor=remove_blanks&post-processor=signature&commit=true" -H 'Content-type: application/json' -d '
[
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
},
{
"name" : "The Lightning Thief",
"features" : "This is just a test",
"cat" : ["book","hardcover"]
}
]'
最初の例では、Solr は "signature" と "remove_blanks" を転送ノードでのみ実行されるプリプロセッサーとして持つチェーンを動的に作成します。一方、2番目の例では、"remove_blanks" がプリプロセッサーとして実行され、"signature" がポストプロセッサーとしてリーダーとレプリカで実行されます。
カスタムチェーンをデフォルトとして設定する
また、各リクエストのリクエストパラメータで名前を指定する代わりに、特定の更新ハンドラーに送信された全てのリクエストでデフォルトで使用されるカスタムチェーンを指定することもできます。
これは、InitParams を介して、または全てのリクエストハンドラーでサポートされている "defaults" セクション に追加することで、特定のパスのデフォルトパラメータとして "update.chain" または "processor" と "post-processor" のいずれかを追加することで実行できます。
以下は、スキーマレスモード で定義された initParam
で、"/update/" で始まる全てのリクエストハンドラーにカスタム更新チェーンを適用します。
<initParams path="/update/**">
<lst name="defaults">
<str name="update.chain">add-unknown-fields-to-the-schema</str>
</lst>
</initParams>
または、以下の例に示すように、"defaults" を使用して同様の効果を実現できます。
<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="update.chain">add-unknown-fields-to-the-schema</str>
</lst>
</requestHandler>
更新リクエストプロセッサーファクトリー
以下は、現在利用可能な更新リクエストプロセッサーの簡単な説明です。UpdateRequestProcessorFactory
は、必要に応じて solrconfig.xml
の更新チェーンに統合できます。これらのクラスの Javadoc を確認することを強くお勧めします。これらの説明は、大部分が Javadoc から抜粋した要約されたスニペットです。
一般的な使用方法の UpdateProcessorFactories
- AddSchemaFieldsUpdateProcessorFactory
-
このプロセッサーは、入力ドキュメントにスキーマ内のフィールドまたは動的フィールドと一致しないフィールドが1つ以上含まれている場合、スキーマにフィールドを動的に追加します。
- AtomicUpdateProcessorFactory
-
このプロセッサーは、従来のフィールド-値ドキュメントをアトミック更新ドキュメントに変換します。このプロセッサーは、(
solrconfig.xml
で定義することなく) ランタイムで使用できます。以下のセクション AtomicUpdateProcessorFactory を参照してください。 - ClassificationUpdateProcessorFactory
-
このプロセッサーは、Luceneの分類モジュールを使用して、単純なドキュメント分類を提供します。このプロセッサーの使用方法の詳細については、https://cwiki.apache.org/confluence/display/solr/SolrClassificationを参照してください。
- CloneFieldUpdateProcessorFactory
-
一致するsourceフィールドに見つかった値を、構成されたdestフィールドに複製します。
- DefaultValueUpdateProcessorFactory
-
fieldNameに値がまだないドキュメントにデフォルト値を追加する単純なプロセッサーです。
- DocBasedVersionConstraintsProcessorFactory
-
このファクトリは、構成されたversionFieldの名前を使用して、ドキュメントごとのバージョン番号に基づいてドキュメントのバージョン制約を強制するのに役立つUpdateProcessorを生成します。
- DocExpirationUpdateProcessorFactory
-
ドキュメントの自動「有効期限」を管理するための更新プロセッサーファクトリ。
- FieldNameMutatingUpdateProcessorFactory
-
構成された
pattern
に一致するすべてのフィールド名を、構成されたreplacement
で置き換えることによって変更します。 - IgnoreCommitOptimizeUpdateProcessorFactory
-
SolrCloudモードで実行している場合に、クライアントアプリケーションからのコミットおよび/または最適化リクエストを無視できます。詳細については、「SolrCloudでのシャードとインデックスデータの作成」を参照してください。
- IgnoreLargeDocumentProcessorFactory
-
limit
(KB単位)を超えるサイズの大きなドキュメントがインデックスに登録されるのを防ぐことができます。これは、非常に大きなドキュメントが原因で、インデックス作成時だけでなくリカバリ時にも予期しない問題を回避するのに役立ちます。デフォルトでは、このプロセッサーは、構成された制限を超えるドキュメントを検出した場合、更新リクエストを中止し、エラーをユーザーに返送します。違反するドキュメントより前に処理されたドキュメントはSolrによってインデックスが作成され、違反するドキュメントより後のドキュメントは処理されません。
または、プロセッサーは「許可」モード(
permissiveMode=true
)を提供します。これにより、違反するドキュメントをスキップし、警告をログに記録しますが、バッチの残りを中止したり、エラーをユーザーに返したりしません。 - RegexpBoostProcessorFactory
-
「inputField」のコンテンツを「boostFilename」にある正規表現と照合し、一致した場合はファイルから対応するブースト値を返し、これを「boostField」にdouble値として出力するプロセッサーです。
- SignatureUpdateProcessorFactory
-
ドキュメントのハッシュ「署名」を生成するために、定義されたフィールドのセットを使用します。「類似」ドキュメントのコピーを1つだけインデックス作成する場合に役立ちます。
- ScriptUpdateProcessorFactory
-
スクリプトとして実装された更新プロセッサーの使用を可能にするプロセッサー。「スクリプト更新プロセッサー」セクションで詳細を確認してください。
- TemplateUpdateProcessorFactory
-
テンプレートパターンに基づいて、ドキュメントに新しいフィールドを追加できます。この更新プロセッサーは、ランタイム(
solrconfig.xml
で定義せずに)でも使用できます。以下の「TemplateUpdateProcessorFactory」セクションを参照してください。 - TimestampUpdateProcessorFactory
-
指定されたフィールドに値がまだない場合、追加されるドキュメントに新しく生成された「NOW」の日付値を追加する更新プロセッサーです。
- URLClassifyProcessorFactory
-
URLを調べて、長さ、パスレベルの数、トップレベルのURL(levels==0)、ランディング/インデックスページのように見えるかどうか、URLの正規表現(例:index.htmlの削除)、URLのドメインとパスの部分など、そのURLの特性を持つさまざまなフィールドに出力する更新プロセッサーです。
- UUIDUpdateProcessorFactory
-
指定されたフィールドに値がまだない場合、追加されるドキュメントに新しく生成されたUUID値を追加する更新プロセッサーです。このプロセッサーは、ランタイム(
solrconfig.xml
で定義せずに)でも使用できます。以下の「UUIDUpdateProcessorFactory」セクションを参照してください。
FieldMutatingUpdateProcessorFactory派生ファクトリ
これらのファクトリはすべて、インデックスが作成されるときにドキュメント内のフィールドを変更する機能を提供します。これらのファクトリを使用する場合は、変更されるフィールドの構成でサポートされている共通オプションの詳細について、FieldMutatingUpdateProcessorFactory javadocsを参照してください。
- ConcatFieldUpdateProcessorFactory
-
構成可能な区切り文字を使用して、指定された条件に一致するフィールドの複数の値を連結します。
- CountFieldValuesUpdateProcessorFactory
-
指定された条件に一致するフィールドの値のリストを、そのフィールドの値の数に置き換えます。
- FieldLengthUpdateProcessorFactory
-
指定された条件に一致するフィールドに見つかったCharSequence値を、それらのCharSequenceの長さ(Integerとして)に置き換えます。
- FirstFieldValueUpdateProcessorFactory
-
指定された条件に一致するフィールドの最初の値のみを保持します。
- HTMLStripFieldUpdateProcessorFactory
-
指定された条件に一致するフィールドに見つかったCharSequence値内のすべてのHTMLマークアップを削除します。
- IgnoreFieldUpdateProcessorFactory
-
インデックスに追加されるドキュメントから、指定された条件に一致するフィールドを無視して削除します。
- LastFieldValueUpdateProcessorFactory
-
指定された条件に一致するフィールドの最後の値のみを保持します。
- MaxFieldValueUpdateProcessorFactory
-
複数の値が見つかった場合に、選択したフィールドから最大値のみを保持する更新プロセッサーです。
- MinFieldValueUpdateProcessorFactory
-
複数の値が見つかった場合に、選択したフィールドから最小値のみを保持する更新プロセッサーです。
- ParseBooleanFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをBoolean値に変更しようとします。
- ParseDateFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをDate値に変更しようとします。
- ParseNumericFieldUpdateProcessorFactory派生クラス
-
- ParseDoubleFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをDouble値に変更しようとします。
- ParseFloatFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをFloat値に変更しようとします。
- ParseIntFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをInteger値に変更しようとします。
- ParseLongFieldUpdateProcessorFactory
-
CharSequence型の値のみを持つ選択したフィールドをLong値に変更しようとします。
- PreAnalyzedUpdateProcessorFactory
-
構成されたフォーマットパーサーを使用して、追加されるドキュメントの構成済みフィールドをPreAnalyzedFieldを使用して解析する更新プロセッサーです。
- RegexReplaceProcessorFactory
-
選択したフィールドに見つかったCharSequence値に構成された正規表現を適用し、一致するものを構成された置換文字列で置き換える更新されたプロセッサーです。
- RemoveBlankFieldUpdateProcessorFactory
-
長さが0(つまり、空の文字列)のCharSequenceである値を検出した場合、削除します。
- TrimFieldUpdateProcessorFactory
-
指定された条件に一致するフィールドに見つかったCharSequence値から、先頭と末尾の空白を削除します。
- TruncateFieldUpdateProcessorFactory
-
指定された条件に一致するフィールドに見つかったCharSequence値を、最大文字長に切り捨てます。
- UniqFieldsUpdateProcessorFactory
-
指定された条件に一致するフィールドに見つかった重複した値を削除します。
プラグインとしてロードできる更新プロセッサーファクトリ
これらのプロセッサーは、Solrリリースに「モジュール」として含まれており、ランタイムでロードされる追加のjarが必要です。詳細については、各モジュールに関連付けられたREADMEファイルを参照してください。
langid
モジュールが提供します-
- LangDetectLanguageIdentifierUpdateProcessorFactory
-
http://code.google.com/p/language-detectionを使用して、入力フィールドのセットの言語を識別します。
- TikaLanguageIdentifierUpdateProcessorFactory
-
TikaのLanguageIdentifierを使用して、入力フィールドのセットの言語を識別します。
analysis-extras
モジュールが提供します-
- OpenNLPExtractNamedEntitiesUpdateProcessorFactory
-
OpenNLP NERモデルを使用して抽出された名前付きエンティティを使用して、インデックスを作成するドキュメントを更新します。SolrCloudで1MBを超えるモデルファイルを使用するには、ZooKeeperサーバーとクライアントの両方を構成するか、コレクションレプリカをホストしている各ノードのファイルシステムにモデルファイルを格納する必要があることに注意してください。
変更または削除するべきではない更新プロセッサーファクトリ
これらは完全性のためにリストされていますが、Solrインフラストラクチャ、特にSolrCloudの一部です。更新リクエストハンドラー(または作成したコピー)を変更するときに、これらを削除しないようにする以外は、これらを変更する必要はほとんどありません。
- DistributedUpdateProcessorFactory
-
必要なすべてのノードに更新を分散するために使用されます。
- NoOpDistributingUpdateProcessorFactory
-
常にnullを返す
DistributingUpdateProcessorFactory
の代替No-Op実装。分散更新をバイパスして独自のカスタム更新ロジックを使用したいエキスパート向けに設計されています。
- LogUpdateProcessorFactory
-
ロギングプロセッサー。これは、チェーンを通過したすべてのコマンドを追跡し、finish()でそれらを出力します。
- RunUpdateProcessorFactory
-
基盤となるUpdateHandlerを使用して更新コマンドを実行します。ユーザーが代替のカスタム
UpdateRequestProcessorFactory
で更新コマンドを明示的に実行している場合を除き、ほぼすべてのプロセッサーチェーンはRunUpdateProcessorFactory
のインスタンスで終わる必要があります。
ランタイムで使用できる更新プロセッサー
これらの更新プロセッサーは、solrconfig.xml
で構成する必要はありません。これらの名前が更新リクエストとともに送信されたprocessor
パラメーターに追加されると、自動的に初期化されます。複数のプロセッサーは、コンマで区切られた複数のプロセッサー名を追加することで使用できます。
AtomicUpdateProcessorFactory
AtomicUpdateProcessorFactory
は、ドキュメントをアトミックに更新するために使用されます。
processor=atomic
パラメーターを使用して呼び出します。通常のupdate
操作をアトミック更新操作に変換するために使用します。これは、アトミック操作の構文がない/update/csv
や/update/json/docs
などのエンドポイントを使用する場合に特に役立ちます。
例:
processor=atomic&atomic.field1=add&atomic.field2=set&atomic.field3=inc&atomic.field4=remove&atomic.field4=remove
上記のパラメーターは、通常のupdate
操作を次の方法で変換します。
-
field1
をアトミックなadd
操作に -
field2
をアトミックなset
操作に -
field3
をアトミックなinc
操作に -
field4
をアトミックなremove
操作に
TemplateUpdateProcessorFactory
TemplateUpdateProcessorFactory
は、テンプレートパターンに基づいてドキュメントに新しいフィールドを追加するために使用できます。
このプロセッサを使用するには、パラメータ processor=template
を使用してください。テンプレートパラメータ template.field
(複数値可) は、追加するフィールドとパターンを定義します。テンプレートには、ドキュメント内の他のフィールドを参照するプレースホルダーを含めることができます。単一のリクエストで複数の Template.field
パラメータを設定できます。
例:
processor=template&template.field=fullName:Mr. {firstName} {lastName}
上記の例では、fullName
という名前の新しいフィールドがドキュメントに追加されます。フィールド firstName
と lastName
は、ドキュメントのフィールドから取得されます。どちらかが欠落している場合、その部分は空文字列で置き換えられます。これらのフィールドが複数値である場合は、最初の値のみが使用されます。