検索インデックス構成

検索インデックスのクエリー動作を変更するためのリファレンス情報。

検索インデックスのクエリー動作を変更するためのリファレンス情報。

検索インデックス構成の変更

検索インデックス構成を作成および変更するには、以下の基本的な手順を実行します。
  1. 検索インデックスを作成します。例を次に示します。
    CREATE SEARCH INDEX ON demo.health_data;
  2. 検索インデックスを変更します。例を次に示します。
    ALTER SEARCH INDEX CONFIG ON demo.health_data SET autoCommitTime = 30000;
  3. 必要に応じて、保留中の検索インデックスのXMLを表示します。例を次に示します。
    DESCRIBE PENDING SEARCH INDEX CONFIG on demo.health_data;
  4. 保留中の変更をアクティブ化します。例を次に示します。
    RELOAD SEARCH INDEX ON demo.health_data;

検索インデックス構成のサンプル

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
  <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
  <luceneMatchVersion>LUCENE_6_0_0</luceneMatchVersion>
  <dseTypeMappingVersion>2</dseTypeMappingVersion>
  <directoryFactory class="solr.StandardDirectoryFactory" name="DirectoryFactory"/>
  <indexConfig>
    <rt>false</rt>
    <rtOffheapPostings>true</rtOffheapPostings>
    <useCompoundFile>false</useCompoundFile>
    <ramBufferSizeMB>512</ramBufferSizeMB>
    <mergeFactor>10</mergeFactor>
    <reopenReaders>true</reopenReaders>
    <deletionPolicy class="solr.SolrDeletionPolicy">
      <str name="maxCommitsToKeep">1</str>
      <str name="maxOptimizedCommitsToKeep">0</str>
    </deletionPolicy>
    <infoStream file="INFOSTREAM.txt">false</infoStream>
  </indexConfig>
  <jmx/>
  <updateHandler class="solr.DirectUpdateHandler2">
    <autoSoftCommit>
      <maxTime>10000</maxTime>
    </autoSoftCommit>
  </updateHandler>
  <query>
    <maxBooleanClauses>1024</maxBooleanClauses>
    <filterCache class="solr.SolrFilterCache" highWaterMarkMB="2048" lowWaterMarkMB="1024"/>
    <enableLazyFieldLoading>true</enableLazyFieldLoading>
    <useColdSearcher>true</useColdSearcher>
    <maxWarmingSearchers>16</maxWarmingSearchers>
  </query>
  <requestDispatcher handleSelect="true">
    <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000"/>
    <httpCaching never304="true"/>
  </requestDispatcher>
  <requestHandler class="solr.SearchHandler" default="true" name="search">
    <lst name="defaults">
      <int name="rows">10</int>
    </lst>
  </requestHandler>
  <requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query">
    <lst name="defaults">
      <int name="rows">10</int>
    </lst>
  </requestHandler>
  <requestHandler class="solr.UpdateRequestHandler" name="/update"/>
  <requestHandler class="solr.UpdateRequestHandler" name="/update/csv" startup="lazy"/>
  <requestHandler class="solr.UpdateRequestHandler" name="/update/json" startup="lazy"/>
  <requestHandler class="solr.FieldAnalysisRequestHandler" name="/analysis/field" startup="lazy"/>
  <requestHandler class="solr.DocumentAnalysisRequestHandler" name="/analysis/document" startup="lazy"/>
  <requestHandler class="solr.admin.AdminHandlers" name="/admin/"/>
  <requestHandler class="solr.PingRequestHandler" name="/admin/ping">
    <lst name="invariants">
      <str name="qt">search</str>
      <str name="q">solrpingquery</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>
  <requestHandler class="solr.DumpRequestHandler" name="/debug/dump">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <str name="echoHandler">true</str>
    </lst>
  </requestHandler>
  <admin>
    <defaultQuery>*:*</defaultQuery>
  </admin>
</config>
CQLインデックス管理では、CQLコマンドで構成要素のショートカットを使用します。

構成要素は、ショートカットごとにアルファベット順にリストされます。XML要素は、要素開始タグとともに表示されます。省略記号は、その他の要素または属性が表示されていないことを示しています。

autoCommitTime
INSERT、UPDATE、またはDELETEの後に、最新のデータで検索インデックスを更新する間隔を定義します。デフォルトでは、変更は10,000ミリ秒ごとに自動的にコミットされます。更新の間隔を変更するには、以下の手順を実行します。
  1. 保留中の検索インデックスの自動コミット時間を設定します。
    ALTER SEARCH INDEX CONFIG ON wiki.solr SET autoCommitTime = 30000;
  2. 保留中の検索構成を表示できます。
    DESCRIBE PENDING SEARCH INDEX CONFIG on wiki.solr;
    表示されたXMLは、更新間隔の最大時間が30000ミリ秒であることを示しています。
    <updateHandler class="solr.DirectUpdateHandler2">
        <autoSoftCommit>
          <maxTime>30000</maxTime>
        </autoSoftCommit>
      </updateHandler>
  3. 保留中の変更をアクティブ化するには、検索インデックスを再度読み込みます。
    RELOAD SEARCH INDEX ON wiki.solr;
インデックス作成のパフォーマンスの構成と調整」を参照してください。
defaultQueryField
クエリーを実行するデフォルト・フィールドの名前。デフォルトは設定されていません。クエリーでフィールドが指定されていない場合に使用するフィールドの設定については、「デフォルトのクエリー・フィールドの設定」を参照してください。
directoryFactory
検索インデックスで使用するディレクトリー係数。暗号化は、検索インデックスごとに有効になります。検索インデックスの暗号化を有効にするには、directoryFactoryのクラスをEncryptedFSDirectoryFactoryに変更します。
  1. 保留中の検索インデックスの暗号化を有効にします。
    ALTER SEARCH INDEX CONFIG ON wiki.solr SET directoryFactory = EncryptedFSDirectoryFactory;
  2. 保留中の検索構成を表示できます。
    DESCRIBE PENDING SEARCH INDEX CONFIG on wiki.solr;
    表示されたXMLは、暗号化が有効になっていることを示しています。
    <directoryFactory class="solr.EncryptedFSDirectoryFactory" name="DirectoryFactory"/>
  3. 保留中の変更をアクティブ化するには、検索インデックスを再度読み込みます。
    RELOAD SEARCH INDEX ON wiki.solr;
他のプロパティを使用して暗号化を調整できますが、DataStaxではデフォルト設定の使用を推奨しています。
filterCacheLowWaterMark
デフォルトは、128 MBです。以下を参照してください。
filterCacheHighWaterMark
デフォルトは、256 MBです。
DSE Searchの構成可能なフィルター・キャッシュは、検索インデックスのフィルター・キャッシュ・メモリー使用量を確実に抑制します。この実装は、セグメントごとにフィルター・キャッシュ使用量の範囲を定義するデフォルトのSolr実装とは対照的です。SolrFilterCacheによる抑制では、検索インデックス(コア)ごとに構成された高基準値に到達するとキャッシュ・エントリーを排除し、低基準値に到達すると停止します。
注:
  • 検索インデックスが再度読み込まれた時点で、フィルター・キャッシュは消去されます。
  • SolrFilterCacheは、自動ウォームアップをサポートしていません。

SolrFilterCacheはデフォルトでは、オフヒープです。一般的に、インデックスが大きいほど、フィルター・キャッシュも大きくなります。適切なデフォルトは1~2 GBです。インデックスのノードあたりのドキュメント数が10億の場合、4~5 GBに設定します。

  1. 大きいインデックスのキャッシュ排除設定を変更するには、低い値と高い値を一度に1つずつ設定します。
    ALTER SEARCH INDEX CONFIG ON solr.wiki SET filterCacheHighWaterMark = 5000;
    ALTER SEARCH INDEX CONFIG ON solr.wiki SET filterCacheLowWaterMark = 2000;
  2. 保留中の検索インデックス構成を表示します。
    <query>
    ...
        <filterCache class="solr.SolrFilterCache" highWaterMarkMB="5000" lowWaterMarkMB="2000"/>
    ...
    </query>
  3. 保留中の変更をアクティブ化するには、検索インデックスを再度読み込みます。
    RELOAD SEARCH INDEX ON wiki.solr;
mergeFactor
新しいセグメントを追加すると最下位のセグメントの数がマージ係数値を超える場合、これらのセグメントはマージされて、1つの大きいセグメントを形成します。マージ係数が10の場合、各マージにより、10個のそれぞれの構成要素の約10倍の大きさを持つ単一セグメントが作成されます。このような大きいセグメントが10個になると、さらに大きい単一のセグメントにマージされます。デフォルトは10です。
  1. 一度にマージするセグメント数を変更するには、以下の手順を実行します。
    ALTER SEARCH INDEX CONFIG ON solr.wiki SET mergeFactor = 5;
  2. 保留中の検索インデックス構成を表示します。
    <indexConfig>
    ...
        <mergeFactor>10</mergeFactor>
    ...
      </indexConfig>
  3. 保留中の変更をアクティブ化するには、検索インデックスを再度読み込みます。
    RELOAD SEARCH INDEX ON wiki.solr;
mergeMaxThreadCount
mergeMaxMergeCountとともに構成する必要があります。Solrコアに対して、Luceneが実行可能な同時マージ回数。デフォルトのmergeScheduler設定は、自動的に設定されます。この設定は調整しないでください。
mergeMaxMergeCount
mergeMaxThreadCountとともに構成する必要があります。累積できる、保留中のマージ(アクティブでバックログ内にあるもの)の数。この値を超えると、受信書き込み数を抑制するためにセグメントのマージが開始されます。デフォルトのmergeScheduler設定は、自動的に設定されます。この設定は調整しないでください。
ramBufferSize
インデックスRAMバッファー・サイズ(MB)。RAMバッファーは、コミットされていないドキュメントを保持します。RAMバッファーが大きいほど、フラッシュが低減されます。フラッシュが発生すると、セグメントも大きくなります。フラッシュが少ないとI/O負荷を抑えることができるため、書き込みワークロードが大きいシナリオでは理想的です。デフォルトは512です。

たとえば、ライブ・インデックス作成を構成する場合はramBufferSizeを調整します。

ALTER SEARCH INDEX CONFIG ON wiki.solr SET autoCommitTime = 100; ALTER SEARCH INDEX CONFIG ON wiki.solr SET realtime = true; ALTER SEARCH INDEX CONFIG ON wiki.solr SET ramBufferSize = 2048; RELOAD SEARCH INDEX ON wiki.solr ;
realtime
インデックス作成のスループットを高めるためにライブ・インデックス作成を有効にします。クラスターごとに1つのノードでのみライブ・インデックス作成を有効にしてください。ライブ・インデックス作成はリアルタイム(RT)インデックス作成とも呼ばれ、Lucene RAMバッファーに対する直接検索をサポートしており、より頻繁で安価なソフト・コミットが可能であり、新たにインデックスが作成されたデータをすばやく認識できるようになります。

ライブ・インデックス作成では、他の同等のNRT設定よりも大きいRAMバッファーとメモリー使用量が必要になります。「RTのインデックス作成の調整」を参照してください。

ショートカットを持たない構成要素

ショートカットを持たない構成要素を指定するには、設定のXMLパスを指定して、ピリオドで子要素を区切ります。

deleteApplicationStrategy
deletesの適用時に削除されたドキュメントの取得方法を制御します。seekexactは安全性の高いデフォルトで、多くの場合に適していますが、パフォーマンスを少し高めたい場合はseekceilingを試してみてください。
有効な値は以下のとおりです。大文字と小文字は区別されません。
  • seekexact

    ブルーム・フィルターを使用して、大半のセグメントからの読み取りを回避します。メモリーが制限され、ユニーク・キー・フィールドのデータがメモリーに収まらない場合に使用します。

  • seekceiling

    シーケンシャル・キーを使用してデーターベースに対してドキュメントの削除/挿入を行う際のパフォーマンスを高めます。これは、このストラテジでは、単語がもう含まれていないことが判明した時点でセグメントからの読み取りを停止できるためです。

mergePolicyFactory
AutoExpungeDeletesTieredMergePolicyのカスタム・マージ・ポリシーは、TieredMergePolicyに基づいています。このポリシーは、deletesがパーセントしきい値に到達した時点で大きいセグメントをマージしてクリーンアップします。自動消去マージは1つずつ発生します。deletesが原因で最大のセグメントがマージされない大きいインデックスで使用します。このマージ設定がワークフローに適しているかどうかを判断するには、Solrの[Segment Info]画面でセグメントを確認します。
設定する場合はXMLを以下のように記述します。
<indexConfig>
  <mergePolicyFactory class="org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory">
    <int name="maxMergedSegmentMB">1005</int>
    <int name="forceMergeDeletesPctAllowed">25</int>
    <bool name="mergeSingleSegments">true</bool>
  </mergePolicyFactory>
</indexConfig>
deletesを自動的に削除できるようにTieredMergePolicyを拡張するには、以下のように入力します。
  1. deletesの自動削除を有効にするには、以下のようにカスタム・ポリシーを設定します。
    ALTER SEARCH INDEX CONFIG ON wiki.solr SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].bool[@name='mergeSingleSegments'] = true;
  2. 最大セグメント・サイズをMB単位で設定します。
    ALTER SEARCH INDEX CONFIG ON wiki.solr SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].int[@name='maxMergedSegmentMB'] = 1005;
  3. 大きいセグメントから削除する際のパーセントしきい値を設定します。
    ALTER SEARCH INDEX CONFIG ON wiki.solr SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].int[@name='forceMergeDeletesPctAllowed'] = 25;
mergeFactorが既存のインデックス構成に含まれている場合は、deletesを自動的に削除できるようにテーブルを変更する前に検索インデックスからmergeFactorを削除する必要があります。
ALTER SEARCH INDEX CONFIG ON wiki.solr DROP indexConfig.mergePolicyFactory;
parallelDeleteTasks
並列処理のソフト/ハード・コミット時に、deletesを適用するために作成されるタスクの数を制御します。RTとNRTのインデックス作成でサポートされています。0より大きい正の数を指定します。デフォルト値は、使用できるプロセッサーの数です。

読み取りと書き込みが混在するワークロードの実行時に書き込み負荷で問題が発生した場合を除き、parallelDeleteTasksはデフォルト値のままにします。書き込みによる使用率が急増するときがあり、読み取りパフォーマンスに悪影響を及ぼす場合は、この値を小さくします。書き込みによる読み取りのパフォーマンス低下を防ぐには、この値を小さくし、dse.yamlmax_solr_concurrency_per_coreを調整します。