再インデックス中に0件のライブドキュメントセグメントが残る
(The bot translated the original post https://lists.apache.org/thread/nbv2bqx7yzt3jh7x2sf6n8j3lwp68vqt into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは、
Luceneのリストでもこの質問を投げかけてみましたが、SolrのIndexReaderの扱いに関しても回答が得られるかもしれないと思い、こちらに投稿しました。
ドキュメントをセグメントごとに読み取り、同じインデックスに再インデックスするプログラムを実行しようとしています。LuceneのAPIを使用して読み取り、SolrのAPI(現在ロードされているコア内)を使用してインデックス作成を行い、フィールドの分析を保持し、削除を自動的に処理しています。処理されるセグメントはマージには参加しません。
再インデックスのコードはSolr内の同じJVMで実行されています。
私が観察しているのは、セグメントが完全に処理され、自動コミット(および自動ソフトコミット)が実行された後でも、0件のライブドキュメントを持つセグメントが残り、インデックスが膨らんでしまうことです。Solrを再起動すると、そのセグメントは正常にクリアされます。
コードなしで同じことを再現しようと試みたところ、空のテストコアに3件のドキュメントをインデックスし、その後同じドキュメントを再インデックスすると、古いセグメントはソフトコミットの間隔が経過するか、明示的なコミットが呼ばれるとすぐに削除されました。
以下は高レベルのコードです。しかし、このコードではSolrを再起動し、コアを再読み込みするまで未削除のセグメントが残ってしまいます。
try (FSDirectory dir = FSDirectory.open(Paths.get(core.getIndexDir()));
IndexReader reader = DirectoryReader.open(dir)) {
for (LeafReaderContext lrc : reader.leaves()) {
// 各リーフからライブドキュメントを読み取り、ドキュメントからSolrInputDocumentを作成し、Solr APIを使用してインデックスする
}
} catch(Exception e) {}
このようにIndexReaderを開くことがSolrのIndexReaderおよびファイル参照カウントの管理に干渉し、ファイルの削除を妨げる可能性があるのでしょうか?何か見落としている点はありますか?
必要であれば、コードやその他の詳細も提供できます。助けていただけると幸いです!
ありがとう、
Rahul
トピックへ返信するには、ログインが必要です。