からドキュメントを削除する際に問題が発生しましたLuceneIndex
。私の削除では、termquery を使用しました。ドキュメントが削除されていないことに気付いた後、最初にドキュメントを検索しようとしましたが、ドキュメントが見つかりません。
ドキュメントを次のように保存します。
public boolean storeNote(Note note) throws Exception {
Document doc = new Document();
this.initalizeWriter(OpenMode.CREATE_OR_APPEND);
if (note != null && note.getUri() != null && note.getPatientUri() != null && !note.getUri().isEmpty()
&& !note.getPatientUri().isEmpty()) {
doc.add(new TextField(URINOTE, note.getUri(), Field.Store.YES));
doc.add(new TextField(URIPATIENT, note.getPatientUri(), Field.Store.YES));
if (note.getTitle() != null && !note.getTitle().isEmpty()) {
doc.add(new TextField(NOTETITLE, note.getTitle(), Field.Store.YES));
}
if (note.getText() != null && !note.getText().isEmpty()) {
doc.add(new TextField(NOTETEXT, note.getText(), Field.Store.YES));
}
}
try
{
this.writer.addDocument(doc);
}
catch(Exception e)
{
LOGGER.info("DocSave Failed \n" + e.getMessage());
return false;
}
finally
{
// Ensure that index is closed. Open indexFiles are locked!
this.closeWriter();
}
return true;
}
ドキュメントをインデックスに保存した後、次の方法で削除するときが来ました。
public boolean deleteNote(Note note) throws IOException
{
if(note == null || note .getUri() == null || note.getUri().isEmpty() )
return false;
LOGGER.info("Deleting Notes with URI '" + note.getPatientUri());
TermQuery deleteTerm = new TermQuery(new Term(URINOTE, note.getUri()));
try
{
this.initalizeWriter(OpenMode.CREATE_OR_APPEND);
this.writer.deleteDocuments(deleteTerm);
this.writer.commit();
LOGGER.info("Deleting for '" + note.getUri() + "done");
}
catch(Exception e)
{
this.writer.rollback();
LOGGER.info("Rollback for '" + note.getPatientUri() + "done \n");
LOGGER.info("Check Consitenzy");
}
finally
{
this.closeWriter();
}
return true;
}
String queryString = URIPATIENT + ":\"" + request.getPatientUri() + "\"";
Query query = new QueryParser(Version.LUCENE_43, NOTETEXT, analyzer).parse(queryString);
私の問題は、私の deleteTerm が結果を返さないことです。私のdeleteTermで検索してみました。
私がそこで見逃したものはありますか?