Hi!
I have a question about how I should go about reindexing an existing
record in an index.
Currently my method that reindexes items is like this:
public void updateInIndex( Item item ) throws IOException{
Document doc = ItemDocumentFactory.createDocument(item);
// Remove the document from search index
Term term = new Term(ItemDocumentFactory.ITEM,
item.getId());
getIndexReader();
indexReader.delete(term);
// Remove the document from search index
getIndexWriter();
indexWriter.addDocument(doc);
}
getIndexReader closes the field variable indexWriter and opens
indexReader and vice versa for get Index writer. The problem with this
is that it leaves the index in a state where the given item is not in
the index (this can be seconds for large items).
The suggested solution is like this:
public void updateInIndex( Item item ) throws IOException{
Document doc = ItemDocumentFactory.createDocument(item);
Term term = new Term(ItemDocumentFactory.ITEM,
item.getId());
getIndexReader();
// Find the old document
TermDocs termDocs = indexReader.termDocs(term);
int docNum = -1;
if(termDocs.next()){
docNum = termDocs.doc();
}
getIndexWriter();
indexWriter.addDocument(doc);
getIndexReader();
// Remove the document from search index
if(docNum!=-1){
indexReader.delete(docNum);
}
}
But what is frightening me here is the sentence "Clients should thus not
rely on a given document having the same number between sessions." in
http://lucene.apache.org/java/docs/api/org/apache/lucene/index/IndexRead
er.html
My index is only accessed from this class and this class is private to a
singleton thread that queues up index tasks (add, remove, update,
optimize).
So the question is: Since I can guarantee nothing else is updating the
index can the second index reader be considered to be the same session
and therefore the docNum for the old document still valid?
I have done considerable tests on this and this seems to always work as
intended.
Cheers! And thanks in advance.
Sindri Traustason
Senior Software Engineer
VYRE
http://www.vyre.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]