Hinzufügen eines Dokuments an einen Lucene Index Ursachen Absturz
Frage
Ich versuche, eine MP3-Datei mit nur einem ID3-Rahmen zu indizieren. mit CLucene und TagLib. der folgende Code funktioniert:
...
TagLib::MPEG::File file("/home/user/Depeche Mode - Personal Jesus.mp3");
if (file.ID3v2Tag()) {
TagLib::ID3v2::FrameList frameList = file.ID3v2Tag()->frameList();
lucene::document::Document *document = new lucene::document::Document;
TagLib::ID3v2::FrameList::ConstIterator frame = frameList.begin();
std::wstring field_name((*frame)->frameID().begin(), (*frame)->frameID().end());
const wchar_t *fieldName = field_name.c_str();
const wchar_t *fieldValue = (*frame)->toString().toWString().c_str();
lucene::document::Field field(fieldName, fieldValue, true, true, true, false);
document->add(field);
writer->addDocument(document);
}
...
aber dies macht den Absturz der Anwendung:
...
TagLib::MPEG::File file("/home/user/Depeche Mode - Personal Jesus.mp3");
if (file.ID3v2Tag()) {
TagLib::ID3v2::FrameList frameList = file.ID3v2Tag()->frameList();
lucene::document::Document *document = new lucene::document::Document;
for (TagLib::ID3v2::FrameList::ConstIterator frame = frameList.begin(); frame != frameList.end(); frame++) {
std::wstring field_name((*frame)->frameID().begin(), (*frame)->frameID().end());
const wchar_t *fieldName = field_name.c_str();
const wchar_t *fieldValue = (*frame)->toString().toWString().c_str();
lucene::document::Field field(fieldName, fieldValue, true, true, true, false);
document->add(field);
}
writer->addDocument(document);
}
...
Warum?
Lösung
Dies ist ein Umfang Problem - durch die Zeit, die Sie writer- nennen> addDocument, die Felder, die Sie hinzugefügt werden befreit. Verwenden Sie stattdessen diesen Code:
document->add(* new lucene::document::Field(fieldName, fieldValue, true, true, true, false));
Sie können bei cl_demo aussehen wollen und cl_test einige Code-Beispiele zu sehen.
Andere Tipps
Do not müssen Sie ein neues lucene konstruieren :: Dokument :: Feld pro Tag Sie hinzufügen? Es scheint, wie Sie die gleiche Adresse für diese wiederverwenden, was problematisch ist. Ich denke, ein Debugger Sie mehr sagen konnte.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow