カスタムURPの例

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

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

アプリケーションでは、schema.xmlファイルに従ってマッピングし、インデックスを作成する前にAPIでSolrドキュメントを微調整することができます。APIは、Solrの入力/出力トランスフォーマー・サポートの対応部分になります。

フィールド入力トランスフォーマー(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をこの場所に配置します。
    • Installer-No Servicesおよびtarボールのインストール: 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);
        }
    }