1概要

Solrは最も人気のあるLuceneベースの検索ソリューションの1つです。それは速く、分散され、堅牢で、そして柔軟で、そしてその背後に活発な開発者コミュニティを持っています。

SolrCloudは、Solr

の新しい分散バージョンです。

  • ここでの主な機能の1つは、ほぼリアルタイム(NRT)の検索** 、つまり、索引付けされているためドキュメントが

    soon

    として検索に使用できることです。


2 SolrCloudでの索引付け

Solrのコレクションは複数の断片で構成されており、各断片にはさまざまなレプリカがあります。シャードのレプリカの1つが、コレクションの作成時にそのシャードのリーダーとして選択されます。

  • クライアントが文書を索引付けしようとすると、その文書が最初になります。

文書の

id

のハッシュに基づいて断片を割り当てました
** クライアントは、その断片のリーダーのURLをzookeeperから入手します。

そして最後に、そのURLに対してインデックス要求が行われます。
** シャードリーダーは、ドキュメントをに送信する前に、ドキュメントにローカルでインデックスを付けます。

レプリカ
** リーダーがすべてのアクティブなメンバーから確認を受け取ると、

レプリカを回復し、インデックス作成クライアントアプリケーションに確認を返す

  • Solrで文書を索引付けしても、その索引に直接移動するわけではありません。

これは、

tlog

(トランザクションログ)と呼ばれるもので書かれています。** Solrは、システムクラッシュの場合に、トランザクションログを使用して、コミットされる前にドキュメントが失われないようにします。

トランザクションログ内のドキュメントがコミットされる前にシステムがクラッシュした場合、つまりディスクに保存された場合、システムが復旧したときにトランザクションログが再生され、ドキュメントの損失はゼロになります。

すべてのインデックス/更新要求はトランザクションログに記録され、コミットを発行するまで増加し続けます。


3 SolrCloudでのコミット

コミット操作とは、変更を確定し、その変更をディスクに永続化することです。 SolrCloudは2種類のコミット操作を提供します。コミットとソフトコミット。


3.1. コミット(ハードコミット)

コミットまたはハードコミットは、Solrがトランザクションログ内のコミットされていないすべての文書をディスクにフラッシュするものです。アクティブなトランザクションログが処理された後、新しいトランザクションログファイルが開かれます。

また、新しくコミットされた文書が検索に使用できるように、検索者と呼ばれるコンポーネントを更新します。検索者は、インデックス内のコミットされたすべてのドキュメントの読み取り専用ビューと見なすことができます。

コミット操作は、

commit

APIを呼び出すことによって、クライアントによって排他的に実行できます。

String zkHostString = "zkServer1:2181,zkServer2:2181,zkServer3:2181/solr";
SolrClient solr = new CloudSolrClient.Builder()
  .withZkHost(zkHostString)
  .build();
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", "123abc");
doc1.addField("date", "14/10/2017");
doc1.addField("book", "To kill a mockingbird");
doc1.addField("author", "Harper Lee");
solr.add(doc1);
solr.commit();

同様に、

solrconfig.xml

ファイルで指定することで

autoCommit

として自動化することができます。3.4節をご覧ください。


3.2. SoftCommit

主にSolrCloudのNRT機能をサポートするために、SoftcommitがSolr 4以降で追加されました。ハードコミットのコストのかかる部分をスキップすることで、ドキュメントをほぼリアルタイムで検索できるようにするためのメカニズムです。

  • ソフトコミットの間、トランザクションログは切り捨てられず、増え続けます。ただし、新しい検索者が開かれる** ため、前回のソフトコミット以降の文書は検索用に表示されます。また、Solrの一部の最上位キャッシュは無効になっているため、完全に無料の操作ではありません。

  • softcommitの

    maxTime

    を1000に指定した場合、ドキュメントはインデックスが作成されてから1秒以内にクエリで使用可能になります。

この機能により、SolrCloudはほぼリアルタイムで検索できるようになります。新しい文書をコミットしなくても検索可能にできるからです。

ソフトコミットはs

__olrconfig.xml


ファイルで指定することで

autoSoftCommit__としてのみ起動できます。3.4節をご覧ください。


3.3. 自動コミットおよび自動ソフトコミット


solrconfig.xml

ファイルは、SolrCloudで最も重要な構成ファイルの1つです。コレクション作成時に生成されます。


autoCommit

または

autoSoftCommit

を有効にするには、ファイル内の以下のセクションを更新する必要があります。

<autoCommit>
  <maxDocs>10000</maxDocs>
  <maxTime>30000</maxTime>
  <openSearcher>true</openSearcher>
</autoCommit>

<autoSoftCommit>
  <maxTime>6000</maxTime>
  <maxDocs>1000</maxDocs>
</autoSoftCommit>


maxTime:

コミットされていない最初の更新から次のコミット/ソフトコミットが行われるまでのミリ秒数。


maxDocs:

最後のコミット以降に発生し、その後に次のコミット/ソフトコミットが発生するはずの更新の数。


openSearcher:

このプロパティは、コミット操作の後に新しいサーチャーを開くかどうかをSolrに指示します。

それが

true

の場合、コミット後、古いサーチャーが閉じられ、新しいサーチャーが開かれ、コミットされたドキュメントが検索用に見えるようになります


4リアルタイム検索に近い

Solrでは、コミットとソフトコミットを組み合わせて、ほぼリアルタイムの検索を実現しています。前述のように、Solrに追加されたドキュメントは、インデックスにコミットされるまで検索結果に表示されません。

通常のコミットはコストがかかるため、ソフトコミットが便利です。しかし、softcommitはドキュメントを永続化しないので、期待する負荷に応じて、オートコミットの

maxTime

interval(または

maxDocs

)を妥当な値に設定する必要があります。


4.1. リアルタイムG

__et

__s

Solrが提供するもう1つの機能は、実際にはリアルタイムである

get

APIです。

get

APIは、まだソフトコミットされていないドキュメントを返すことがあります。

ドキュメントがインデックスに見つからない場合は、トランザクションログを直接検索します。そのため、インデックス呼び出しが戻った直後に

get

API呼び出しを起動しても、ドキュメントを取得できます。

しかし、あまりにも良いことすべてのように、ここでキャッチがあります。


get

API呼び出しでドキュメントの

id

を渡す必要があります

もちろん、

id

と共に他のフィルタクエリを提供できますが、

id

がないと、呼び出しは機能しません。

http://localhost:8985/solr/myCollection/get?id=1234&fq=name:baeldung


5結論

NRT機能を微調整することに関して、Solrは私たちにかなりの柔軟性を提供します。サーバーから最高のパフォーマンスを引き出すには、ユースケースと予想される負荷に基づいて、commitとsoftcommitの値を試す必要があります。

  • コミット間隔を長くし過ぎると、トランザクションログがかなり大きくなる可能性があります。

また、運用に入る前に、システムの適切なパフォーマンステストを行うことをお勧めします。ドキュメントが希望の時間内に検索可能になっているかどうかを確認する必要があります。