カスタムURPの例
カスタムの更新要求プロセッサー(URP)を使用して、Solr URPを拡張します。
DSE Searchには、Solr更新のプラグインAPIとCassandraDocumentReaderのプラグインのリリース済みバージョンが含まれています。プラグインAPIは、データがSolrに送信される前に、セカンダリ・インデックス作成APIからデータを変換します。CassandraDocumentReaderのプラグインは、CassandraからSolrに結果データを変換します。
アプリケーションでは、schema.xmlファイルに従ってマッピングし、インデックスを作成する前にAPIでSolrドキュメントを微調整することができます。APIは、Solrの入力/出力トランスフォーマー・サポートの対応部分になります。
フィールド入力トランスフォーマー(FIT)の日付フィールド値には、末尾に「z」が必要です。
手順
APIを使用するには:
-
solrconfig.xmlでカスタムURPを構成します。
<dseUpdateRequestProcessorChain name="dse"> <processor class="com.datastax.bdp.search.solr.functional.DSEUpdateRequestProcessorFactoryExample"> </processor> </dseUpdateRequestProcessorChain>
-
Solr UpdateRequestProcessorを拡張するカスタムURPを使用するクラスを作成します。例:
package com.datastax.bdp.search.solr.functional; import com.datastax.bdp.search.solr.handler.update.CassandraAddUpdateCommand; import com.datastax.bdp.search.solr.handler.update.CassandraCommitUpdateCommand; import com.datastax.bdp.search.solr.handler.update.CassandraDeleteUpdateCommand; import java.io.IOException; import org.apache.solr.update.AddUpdateCommand; import org.apache.solr.update.CommitUpdateCommand; import org.apache.solr.update.DeleteUpdateCommand; import org.apache.solr.update.MergeIndexesCommand; import org.apache.solr.update.processor.UpdateRequestProcessor; public class TestUpdateRequestProcessor extends UpdateRequestProcessor { public boolean cprocessAdd = false; public boolean processAdd = false; public boolean cprocessDelete = false; public boolean processDelete = false; public boolean cprocessCommit = false; public boolean processCommit = false; public TestUpdateRequestProcessor(UpdateRequestProcessor next) { super(next); } public void processAdd(AddUpdateCommand cmd) throws IOException { if (cmd instanceof CassandraAddUpdateCommand) { cprocessAdd = true; } else { processAdd = true; } super.processAdd(cmd); } public void processDelete(DeleteUpdateCommand cmd) throws IOException { if (cmd instanceof CassandraDeleteUpdateCommand) { cprocessDelete = true; } else { processDelete = true; } super.processDelete(cmd); } public void processMergeIndexes(MergeIndexesCommand cmd) throws IOException { super.processMergeIndexes(cmd); } public void processCommit(CommitUpdateCommand cmd) throws IOException { if (cmd instanceof CassandraCommitUpdateCommand) { cprocessCommit = true; } else { processCommit = true; } super.processCommit(cmd); } }
-
クラスをJARにエクスポートし、そのJARをこの場所に配置します。
- Installer-No Servicesおよびtarボールのインストール: install-location/resources/solr/lib
- Installer-Servicesおよびパッケージのインストール: /usr/share/dse/solr/lib
JARは自動的にCLASSPATHに追加されます。 -
実装をテストします。例:
package com.datastax.bdp.search.solr.functional; import com.datastax.bdp.search.solr.handler.update.DSEUpdateProcessorFactory; import org.apache.solr.core.SolrCore; import org.apache.solr.update.processor.UpdateRequestProcessor; public class DSEUpdateRequestProcessorFactoryExample extends DSEUpdateProcessorFactory { SolrCore core; public DSEUpdateRequestProcessorFactoryExample(SolrCore core) { this.core = core; } public UpdateRequestProcessor getInstance( UpdateRequestProcessor next) { return new TestUpdateRequestProcessor(next); } }