[ https://issues.apache.org/jira/browse/LUCENE-2863?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12980965#action_12980965 ]
Earwin Burrfoot commented on LUCENE-2863: ----------------------------------------- updateDocument() is an atomic version of deleteDocument() + addDocument(), nothing more and there's nothing surprising you lose your fields if you delete the doc and don't add them back later. > Updating a documenting looses its fields that only indexed, also NumericField > tries are completely lost > ------------------------------------------------------------------------------------------------------- > > Key: LUCENE-2863 > URL: https://issues.apache.org/jira/browse/LUCENE-2863 > Project: Lucene - Java > Issue Type: Bug > Components: Store > Affects Versions: 3.0.2, 3.0.3 > Environment: WindowsXP, Java1.6.20 using a RamDirectory > Reporter: Tamas Sandor > Priority: Blocker > > I have a code snippet (see below) which creates a new document with standard > (stored, indexed), *not-stored, indexed-only* and some *NumericFields*. Then > it updates the document via adding a new string field. The result is that all > the fields that are not stored but indexed-only and especially NumericFields > the trie tokens are completly lost from index after update or delete/add. > {code:java} > Directory ramDir = new RamDirectory(); > IndexWriter writer = new IndexWriter(ramDir, new WhitespaceAnalyzer(), > MaxFieldLength.UNLIMITED); > Document doc = new Document(); > doc.add(new Field("ID", "HO1234", Store.YES, Index.NOT_ANALYZED_NO_NORMS)); > doc.add(new Field("PATTERN", "HELLO", Store.NO, Index.NOT_ANALYZED_NO_NORMS)); > doc.add(new NumericField("LAT", Store.YES, > true).setDoubleValue(51.488266037777066d)); > doc.add(new NumericField("LNG", Store.YES, > true).setDoubleValue(-0.08913399651646614d)); > writer.addDocument(doc); > doc = new Document(); > doc.add(new Field("ID", "HO2222", Store.YES, Index.NOT_ANALYZED_NO_NORMS)); > doc.add(new Field("PATTERN", "BELLO", Store.NO, Index.NOT_ANALYZED_NO_NORMS)); > doc.add(new NumericField("LAT", Store.YES, > true).setDoubleValue(101.488266037777066d)); > doc.add(new NumericField("LNG", Store.YES, > true).setDoubleValue(-100.08913399651646614d)); > writer.addDocument(doc); > Term t = new Term("ID", "HO1234"); > Query q = new TermQuery(t); > IndexSearcher seacher = new IndexSearcher(writer.getReader()); > TopDocs hits = seacher.search(q, 1); > if (hits.scoreDocs.length > 0) { > Document ndoc = seacher.doc(hits.scoreDocs[0].doc); > ndoc.add(new Field("FINAL", "FINAL", Store.YES, > Index.NOT_ANALYZED_NO_NORMS)); > writer.updateDocument(t, ndoc); > // writer.deleteDocuments(q); > // writer.addDocument(ndoc); > } else { > LOG.info("Couldn't find the document via the query"); > } > seacher = new IndexSearcher(writer.getReader()); > hits = seacher.search(new TermQuery(new Term("PATTERN", "HELLO")), 1); > LOG.info("_____hits HELLO:" + hits.totalHits); // should be 1 but it's 0 > writer.close(); > {code} > And I have a boundingbox query based on *NumericRangeQuery*. After the > document update it doesn't return any hit. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org