Es scheint, dass jedes Mal, wenn ich ein vorhandenes Dokument im Index aktualisiere (dasselbe Verhalten für delete/add), es nicht mit einer TermQuery gefunden werden kann. Hier ist ein kurzer Ausschnitt:Lucene kann Dokumente nach dem Update nicht finden
iw = neuer IndexWriter (Verzeichnis, Config);
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);
}
Dies erzeugt die folgende Ausgabe der Konsole:
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>
________________
Es scheint, dass das Dokument (und nicht das neue Dokument) im Index nach dem Update, und durch die MatchAllDocsQuery zurückgegeben wird, kann aber nicht von einer TermQuery gefunden werden.
Vollbeispielcode verfügbar bei http://pastebin.com/sP2Vav9v
Auch dies geschieht nur (zweite Suche nicht funktioniert), wenn der Stringfield Wert Sonderzeichen enthält (zum Beispiel file:/F: /).
Vermissen Sie nicht 'iw.commit()'? – mindas
Ändert nichts. Ich habe es schon versucht. Außerdem öffnet die Suche jedes Mal einen neuen Leser vom Writer: DirectoryReader reader = DirectoryReader.open (iw, true); – Michael
Ich scheine ein ähnliches Problem zu treffen. Welche Version von Lucene ist das? – carlspring