21

ドキュメントのインデックス作成と検索に Lucene.Net を使用しています。また、次のコードを使用してインデックスを作成するか、存在する場合はそれを開きます。

IndexWriter writer = new IndexWriter(@"C:\index", new StandardAnalyzer(), !IndexExists);

...

private bool IndexExists
{
    get
    {
        return ??
    }
}

では、どうすればIndexExists簡単に実装できるでしょうか。例外をスローする必要はありません。

4

6 に答える 6

38

静的メソッド IndexReader.IndexExists(string path) (またはそのオーバーロードの 1 つ) はかなり適しているようです。

于 2009-06-16T14:38:03.710 に答える
7

<4.0ではIndexReader.indexExists(org.apache.lucene.store.Directory)

>4.0ではDirectoryReader.indexExists(org.apache.lucene.store.Directory)

于 2013-03-04T11:15:29.937 に答える
3

ブール値のパラメーターを取らないコンストラクターを使用することもできます。存在する場合は既存のインデックスを開き、存在しない場合は新しいインデックスを作成します。

Java ドキュメント リンク (Lucene.Net と同じ):http://lucene.apache.org/java/2_3_1/api/org/apache/lucene/index/IndexWriter.html#IndexWriter(org.apache.lucene.store.Directory, org.apache.lucene.analysis.Analyzer)

于 2009-06-17T15:31:02.613 に答える
0

私もこのアンサーを見つけようとしましたが、成功しませんでした。コードで使用した方法は次のとおりです。

private bool IndexExists { get { return IndexDirectory.FileExists("segments.gen"); } }

于 2011-07-06T14:26:50.193 に答える
0

おっと!

これは「ストレート Java」の Lucene ですが、他の種類にも当てはまる可能性があります。

Lucene 4.0.0 では、API はDirectoryReader.indexExists()言う

指定したディレクトリにインデックスが存在する場合は true を返します。

しかし、Lucene 4.10.2 の APIDirectoryReader.indexExists()

指定されたディレクトリにインデックスが存在する可能性がある場合は true を返します。破損したインデックスが存在する場合、またはインデックスがコミット中の場合は注意してください。

...はい、文の途中で途切れます。注意: Javadoc をソースから直接コンパイルしましたが、同じ未完成のフレーズがオンライン API に見られます。それだけでなく、Lucene 6.0.0 API を見てみましたが、まったく同じです。

ただし、「返品」句は次のとおりです。

インデックスが存在する場合は true 。それ以外の場合は false

...しかし、現在、空のディレクトリが時々(?)返されると信じていますtrue(ユニットテストから)。とにかく、私はそれを信用しません。

空のディレクトリにを作成するIndexReaderと、そのすべてのメソッドが例外をスローせずに返されるように見えます。あなたは行くことができindexReader.numDocs()、これは0を返しますが、それはそこにインデックスがないことを証明するものではなく、Documentsがないことだけを証明しています. もちろん、要件によってはそれで十分かもしれません。

同様に、IndexSearcherそのような からを作成したりIndexReader、 を作成したりできますIndexWriter。これらのいずれも、空のディレクトリに明らかな問題はありません。

より良い解決策:

    try {
        directoryReader = DirectoryReader.open( fsDir );
    } catch ( org.apache.lucene.index.IndexNotFoundException e) {
        ...
    }

私が知る限り、これは信頼できるようです。

于 2016-11-03T17:15:43.117 に答える
0

これが古いエントリであることは承知していますが、Sean Carpenter が投稿した内容は完全に正しく、このコンストラクタは Lucene .NET の最新バージョンにも存在します。IndexWriterクラスのドキュメントは、次の場所にあります。

于 2013-08-09T15:14:42.607 に答える