検索サービスに同期されたデータは、コミットされた後にのみ可視化されます。データがいつ可視化されるかは、ソフトコミットとハードコミットという 2 種類のコミットタイプによって制御されます。
コミットタイプの仕組み
| コミットタイプ | 機能 |
|---|---|
| ソフトコミット | インデックスの変更を検索クエリに対して可視化します。データはクエリ可能になりますが、まだディスクにはフラッシュされていません。 |
| ハードコミット | インデックスデータをディスクにフラッシュします。データは永続ストレージに永続化されます。 |
この 2 種類のコミットタイプを組み合わせて使用します。ほぼリアルタイムのクエリ可視性にはソフトコミットを、耐久性にはハードコミットを使用します。ハードコミットと比較して、ソフトコミットは完了までにかかる時間が短くなります。
solrconfig.xml でのコミット タイミングの設定
インデックスを作成する際、config set という名前の構成セットを指定します。その構成セット内の solrconfig.xml ファイルがコミット動作を制御します。
ソフトコミット
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:15000}</maxTime>
</autoSoftCommit>デフォルトは 15,000 ms (15 秒) です。データは書き込み後 15 秒以内にクエリ可能になります。
maxTime は、書き込みからデータが検索結果に表示されるまでの最大遅延時間を決定します。値を小さくすると可視性のレイテンシは短縮されますが、ソフトコミットの頻度は増加します。
ハードコミット
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:30000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>デフォルトは 30,000 ms (30 秒) です。データは 30 秒以内にディスクにフラッシュされます。
この値は、書き込みパフォーマンスを低下させる頻繁なディスクフラッシュを避けるために、十分に高く設定してください。特別な要件がない限り、デフォルト値を使用してください。
十分な時間を指定することを推奨します。そうしないと、検索サービスが頻繁にデータをディスクにフラッシュするため、書き込みパフォーマンスに影響します。デフォルト値を使用してください。
構成変更の適用
構成セットをダウンロードします。
solrconfig.xml内のautoSoftCommitとautoCommitのmaxTime値を変更します。更新した構成セットを ZooKeeper にアップロードします:
./solr zk upconfig -d conf/ -n myconfフラグ 説明 -d conf/ローカル構成ディレクトリへのパス -n myconfZooKeeper 内の構成セット名 Alibaba Cloud HBase コンソールでコレクションをリロードして、新しい構成を適用します。
クライアントからのコミット制御
solrconfig.xml を変更したくない場合は、クライアントコードから直接コミットタイミングを制御できます。
ドキュメントごとのコミット期限の設定
ドキュメントを追加する際にコミット期限を渡します:
// シグネチャ
public UpdateResponse add(SolrInputDocument doc, int commitWithinMs)
throws SolrServerException, IOException;
// 例:1,000 ms (1 秒) 以内にコミット
cloudSolrClient.add(doc, 1000);commitWithinMs は、ドキュメントがコミットされてクエリ可能になるまでの最大ミリ秒数を指定します。
明示的なコミットのトリガー
書き込み後に commit() を呼び出して、即時コミットを強制します:
// シグネチャ
// waitFlush: 書き込みがディスクにフラッシュされるまで待機するかどうか
// waitSearcher: 新しいサーチャーが開くまで待機するかどうか
// softCommit: ソフトコミットの場合は true、ハードコミットの場合は false
public UpdateResponse commit(boolean waitFlush, boolean waitSearcher, boolean softCommit)
throws SolrServerException, IOException;
// 例:待機せずに即時ソフトコミットをトリガー
cloudSolrClient.commit(false, false, true);