カスタムURPの例

カスタムの更新要求プロセッサー(URP)を使用して、Apache Solr™ URPを拡張します。

DSE Searchには、Solr更新のプラグインAPIとCassandraDocumentReaderのプラグインのリリース済みバージョンが含まれています。プラグインAPIは、データが送信される前に、セカンダリ・インデックス作成APIからのデータを変換します。CassandraDocumentReaderのプラグインは、データベースからの結果データをDSE Searchに変換します。

アプリケーションで、インデックス・スキーマに従ってマップしてインデックスを作成する前に、APIを使用して検索ドキュメントを微調整することができます。

フィールド入力トランスフォーマー(FIT)の日付フィールド値には、末尾に「z」が必要です。

手順

APIを使用するには:

  1. solrconfig.xmlでカスタムURPを構成します。
    <dseUpdateRequestProcessorChain name="dse">
     <processor class="com.datastax.bdp.search.solr.functional.DSEUpdateRequestProcessorFactoryExample">
     </processor>
    </dseUpdateRequestProcessorChain>
  2. 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);
        }
    }
    
  3. クラスをJARにエクスポートし、そのJARをこの場所に配置します。
    • tarボールおよびInstaller-No Servicesのインストール: install-location/resources/solr/lib
    • パッケージおよびInstaller-Servicesのインストール: /usr/share/dse/solr/lib
    JARは自動的にCLASSPATHに追加されます。
  4. 実装をテストします。例を次に示します。
    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);
        }
    }