2016-11-20 10 views
-1

これを二重チェックする:これは不可能であると仮定し、そのような情報を何らかの形で索引ディレクトリのインデックスファイルにまとめておきたい場合は、自分で行う方法を工夫する必要があります。Luceneインデックスファイルからアナライザー、バージョンなどを取り出しますか?

別のアナライザを異なるディレクトリに使用することは明らかですが、99%の時間は、QueryParserの構築時に正しいものを使用することが非常に重要です。QPに異なるものがある場合は、あらゆる種類の不正確さが結果。

同じように、間違ったバージョンのインデックスファイルを取得すると、私が知っている限り、完全なエラーにならない可能性があります。不正確な結果が得られる可能性があります。

Luceneの人々がこの種の情報をインデックスファイルと一緒にまとめることを考えたことがあるのだろうか? ElasticsearchのようなLuceneの派生アプリがこのような仕組みを組み込んでいるかどうかを誰かが知っているのだろうか?

実際には、インデックスの "_0"ファイル(_0.cfe、_0.cfs、_0.si)を調べるだけで、3つのすべてに "Lucene"という言葉が実際に含まれています。 Hmmm ...

PS その他の関連する考え:何らかの種類のテキストドキュメント(または1000ドキュメント)のインデックスを作成しているとし、そのたびにインデックスを最新の状態に保ちたいとします開かれる。これを実行する明白な方法の1つは、個々のファイルの最終変更日をインデックスが最後に更新された日時と比較することです。現在古くなっているドキュメントでは、索引から削除された情報を削除する必要があります。再インデックスを作成する必要があります。

この必要性は、Luceneインデックスと関連して常に発生している必要があります。インデックスファイルに適切な "メタ情報"が含まれていないと、一般的にどのように取り組まれていますか?この問題に興味を持って

答えて

0

誰でも:

それは私がVersionは、インデックスファイルに含まれていることを言ったことから、表示されません。私はCheckIndexクラスとそれから得ることができる様々な情報を見ました。 CheckIndex.Status.SegmentInfoStatusを入手する方法を見つけることなく、Versionを得ることができる。私はこれが意図的であると仮定し始めており、その考え方はLuceneに必要に応じてインデックスの更新を処理させることに過ぎないということです。そうであれば完全に満足できる状態ではありません...

Analyzerクラスのように、この種の「メタデータ」を自分で実装しなければならないようです他のファイルにテキストファイルを含めるだけで済みますし、代わりにIndexDataクラスを使うこともできます。もちろん、Versionもこの方法で保存することができます。

このような情報を書くには、IndexWriter.setCommitData()を参照してください。

このような情報を取得するには、DirectoryReaderのように、いくつかのサブクラス(012)がIndexReaderのいずれかでなければなりません。