Rất tiếc!
Đây là "thẳng Java" Lucene, nhưng nó cũng có thể áp dụng cho các giống khác.
Trong Lucene 4.0.0 API cho DirectoryReader.indexExists()
nói
trả về true nếu một chỉ số tồn tại ở thư mục chỉ định.
Nhưng trong Lucene 4.10.2 API cho DirectoryReader.indexExists()
nói
trả về true nếu một chỉ số có khả năng tồn tại ở thư mục chỉ định. Lưu ý rằng nếu một chỉ số tham nhũng tồn tại, hoặc nếu một chỉ số trong quá trình cam kết
... vâng, nó phá vỡ ra giữa câu. NB Tôi đã biên dịch Javadoc trực tiếp từ nguồn, nhưng cùng một cụm từ chưa hoàn thành có thể được nhìn thấy trong API trực tuyến. Không chỉ vậy, nhưng tôi đã nhìn vào API Lucene 6.0.0, và nó giống hệt nhau.
Các "Thu nhập" Tuy nhiên cụm từ là:
đúng nếu một chỉ số tồn tại; false else
... nhưng hiện tại tôi tin rằng thư mục trống sẽ đôi khi (?) trả lại true
(từ thử nghiệm đơn vị của tôi). Dù sao, tôi sẽ không tin nó.
Nếu bạn tạo IndexReader
trên một thư mục trống, có vẻ như tất cả các phương thức của nó sẽ trả lại mà không phải ném ngoại lệ. Bạn có thể đi indexReader.numDocs()
và điều này sẽ trả lại 0, nhưng điều đó không chứng minh rằng không có chỉ mục ở đó, chỉ có không có Document
s. Tùy thuộc vào yêu cầu của bạn có thể là đủ, tất nhiên.
Tương tự, bạn có thể tạo IndexSearcher
từ số IndexReader
như vậy và bạn có thể tạo IndexWriter
. Không ai trong số này sẽ có bất kỳ vấn đề rõ ràng với một thư mục trống. GIẢI PHÁP
TỐT HƠN:
try {
directoryReader = DirectoryReader.open(fsDir);
} catch (org.apache.lucene.index.IndexNotFoundException e) {
...
}
này xuất hiện, như xa như tôi có thể nói, là đáng tin cậy.
Lucene.net không có quá tải này. – Marek
Phiên bản nào của Lucene.Net thiếu quá tải? Nó có trong 2.4. –
Tôi đang sử dụng Lucene "thẳng Java". 'IndexWriter' trong 4.10 + chỉ có một hàm tạo. Nhưng tôi không hiểu làm thế nào bạn có thể có được những gì người hỏi muốn từ giải pháp của bạn: tìm hiểu có hay không có một chỉ số đã có. –