Dường như bất cứ khi nào tôi cập nhật tài liệu hiện có trong chỉ mục (cùng một hành vi để xóa/thêm), không thể tìm thấy tài liệu đó bằng một Truy vấn. Đây là đoạn mã ngắn:Lucene không thể tìm thấy tài liệu sau khi cập nhật
iw = newWinditerWriter (thư mục, cấu hình);
Document doc = new Document();
doc.add(new StringField("string", "a", Store.YES));
doc.add(new IntField("int", 1, Store.YES));
iw.addDocument(doc);
Query query = new TermQuery(new Term("string","a"));
Document[] hits = search(query);
doc = hits[0];
print(doc);
doc.removeField("int");
doc.add(new IntField("int", 2, Store.YES));
iw.updateDocument(new Term("string","a"), doc);
hits = search(query);
System.out.println(hits.length);
System.out.println("_________________");
for(Document hit : search(new MatchAllDocsQuery())){
print(hit);
}
này tạo ra giao diện điều khiển đầu ra sau đây:
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<string:a>
stored<int:1>
________________
0
_________________
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<string:a>
stored<int:2>
________________
Dường như sau khi cập nhật, tài liệu (chứ không phải tài liệu mới) trong chỉ mục và được trả về bởi các MatchAllDocsQuery, nhưng không thể được tìm thấy bởi một TermQuery.
Full mẫu mã có sẵn tại http://pastebin.com/sP2Vav9v
Ngoài ra, điều này chỉ xảy ra (thứ hai tìm kiếm không làm việc) khi giá trị Stringfield chứa các ký tự đặc biệt (ví dụ file:/F: /).
Bạn không thiếu 'iw.commit()'? – mindas
Không thay đổi bất cứ điều gì. Cố gắng nó aleady. Ngoài ra, tìm kiếm sẽ mở ra một trình đọc mới từ người viết mỗi lần: DirectoryReader reader = DirectoryReader.open (iw, true); – Michael
Tôi dường như đang gặp vấn đề tương tự. Lucene là phiên bản nào? – carlspring