Hi, I recently discovered that I need to add a single field to every document in an existing (very large) index. Reindexing from scratch is not an option I want to consider right now, so I wrote a utility to add the field by rewriting the index - but this seemed to lose some of the fields (indexed, but not stored?). In fact, it shrunk a 12Gb index down to 4.2Gb - clearly not what I wanted. :-) What am I doing wrong?
My technique was: Analyzer analyser = new StandardAnalyzer(); IndexSearcher searcher = new IndexSearcher(indexPath); IndexWriter indexWriter = new IndexWriter(indexPath, analyser); Hits hits = matchAllDocumentsFromIndex(searcher); for (int i=0; i < hits.length(); i++) { Document doc = hits.doc(i); String id = doc.get("unique-id"); doc.add(new Field("newField", newValue, Field.Store.YES, Field.Index.UN_TOKENIZED)); indexWriter.updateDocument(new Term("unique-id", id), doc); } searcher.close(); indexWriter.optimize(); indexWriter.close(); Note that my matchAllDocumentsFromIndex() does get the right number of hits from the index - i.e. the same number as held in the index. Thanks for any ideas! BTW I am using Lucene 2.3.2. - Chris