You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by scott cote <sc...@gmail.com> on 2016/04/08 21:21:26 UTC
update of a numerical field in a lucene document
All,
I’m missing a not so secret "secret sauce" somewhere in my simple code (say that 5 times real fast - no not “that”). Am trying to show the efficiency increase of delete/create a document in lucene (the old way of updating a document) versus the newly supported mode of being able to update a specific field. Unfortunately, despite my best efforts, I can’t seem to get the field to update.
Below are the simplified portions of relevant code:
Setup of my index:
final Path path = FileSystems.getDefault().getPath(indexDirectoryPath);
final Directory indexDirectory = new SimpleFSDirectory(path);
final IndexWriterConfig conf = new IndexWriterConfig(new StandardAnalyzer());
writer = new IndexWriter(indexDirectory, conf);
Creating the document in my lucene index:
accumulator += 1l;
final Document document = new Document();
final Field contentField = new TextField(LuceneConstants.CONTENTS, new FileReader(file));
final Field fileNameField = new StringField(LuceneConstants.FILE_NAME, file.getName(), Field.Store.YES);
final Field filePathField = new StringField(LuceneConstants.FILE_PATH, file.getCanonicalPath(), Field.Store.YES);
final Field fileEntryOrderField = new LongField(LuceneConstants.ENTRY_ORDER, accumulator, Field.Store.YES);
final Field fileEntryOrderNumericDocValuesField = new NumericDocValuesField(LuceneConstants.ENTRY_ORDER, accumulator);
document.add(contentField);
document.add(fileNameField);
document.add(filePathField);
document.add(fileEntryOrderField);
document.add(fileEntryOrderNumericDocValuesField);
writer.addDocument(document);
writer.commit();
writer.close();
Updating the document in my lucene index
String searchTermString = "record2.txt”;
String field = LuceneConstants.ENTRY_ORDER;
long value = 100l;
final Term term = new Term(LuceneConstants.FILE_NAME,searchTermString);
writer.updateNumericDocValue(term, field, value);
writer.commit();
writer.close();
I expect the value of the numeric field to increase to zero, but I’m not seeing it when i retrieve the document at a later step.
From what I have observed in my debugger, the updateNumericDocValue method in IndexWriter (lines 1509 through 1521 accepts the fields as pre-existing (passes the if statement that ensures that the document has the field), but then is not gated into “processEvents(true,false);” step as the line 1515 docWriter.updateDocValues(….) returns false. can’t seem to pin down why that is happening.
What am I missing?
SCott