Ups!
To jest "prosta Java" Lucene, ale może również odnosić się do innych odmian.
W Lucene 4.0.0 API dla DirectoryReader.indexExists()
mówi
Zwraca true, jeśli indeks istnieje w określonym katalogu.
Ale w Lucene 4.10.2 API dla DirectoryReader.indexExists()
mówi
Zwraca true, jeśli indeks prawdopodobnie istnieje w określonym katalogu. Zauważ, że jeśli uszkodzony indeks istnieje, czy indeks w procesie popełnienia
... tak, to urywa w pół zdania. NB Skompilowałem mój Javadoc bezpośrednio ze źródła, ale to samo niedokończone wyrażenie można zobaczyć w internetowym API. Nie tylko, ale spojrzałem na Lucene 6.0.0 API, i to jest dokładnie to samo.
W "zwraca" fraza jednakże:
true, jeśli indeks istnieje; false inaczej
... ale obecnie sądzę, że pusty katalog czasami (?) zwróci true
(z mojej jednostki testowania). W każdym razie nie ufałbym temu.
Jeśli utworzysz IndexReader
w pustym katalogu, okaże się, że wszystkie jego metody zostaną zwrócone bez odrzucania wyjątków. Możesz przejść indexReader.numDocs()
, a to zwróci 0, ale to nie dowodzi, że nie ma tam indeksu, tylko że nie ma Document
s. Oczywiście w zależności od twoich wymagań.
Podobnie można utworzyć IndexSearcher
z takiej IndexReader
i można utworzyć IndexWriter
. Żadne z nich nie będzie miało żadnego widocznego problemu z pustym katalogiem.
lepsze rozwiązanie: Komunikat ten
try {
directoryReader = DirectoryReader.open(fsDir);
} catch (org.apache.lucene.index.IndexNotFoundException e) {
...
}
, o ile mogę powiedzieć, aby być wiarygodne.
Lucene.net nie ma tego przeciążenia. – Marek
W której wersji Lucene.Net brakuje przeciążenia? Jest tam w 2.4. –
Używam Lucene "prostej Javie". 'IndexWriter' w 4.10. + Ma tylko jeden konstruktor. Ale nie rozumiem, w jaki sposób można uzyskać to, czego pytał wnioskodawca od rozwiązania: dowiedzieć się, czy istnieje już tam indeks. –