My guess is that LUCENE-3065 won't help. Couldn't do the read/update stuff before NumericFields came along and still can't, with or without that patch.
-- Ian. On Thu, May 10, 2012 at 9:26 AM, Tim Eck <t...@terracottatech.com> wrote: > Thanks for the response (and sorry for the excessive duplicate posting to > the list, that obviously wasn't on purpose). > > I should have explicitly asked this, but one specific thing I wondered was > whether LUCENE-3065 would make any difference in my example program (I > haven't had time to test it yet) > > In the meantime I have gone through the motions to rebuild my doc from > whole cloth and I'm reasonably sure it is working me :-) > > Thanks! > > -----Original Message----- > From: Ian Lea [mailto:ian....@gmail.com] > Sent: Thursday, May 10, 2012 1:20 AM > To: java-user@lucene.apache.org > Subject: Re: update/re-add an existing document with numeric fields > > You can't selectively update fields in docs read from an index, in old > or current versions of lucene. I think there are some ideas floating > around but nothing usable today as far as I know. You'll need to > rebuild the whole doc before passing it to writer.updateDocument(). > > > -- > Ian. > > > On Wed, May 9, 2012 at 6:38 PM, Tim Eck <t...@terracottatech.com> wrote: >> Note: I'm bound to lucene 3.0.3 for the context of this question, but >> I would be interested to know if newer versions would help me here. >> >> I have an existing document in my directory that has one regular >> String field and one numeric field. I naively thought I could update >> that document to change the String field with code like this: >> >> áFSDirectory dir = FSDirectory.open(...); >> áIndexWriter writer = new IndexWriter(dir, new >> á á áStandardAnalyzer(Version.LUCENE_30), MaxFieldLength.UNLIMITED); >> >> á// doc has 2 fields, one String and the other numeric >> áDocument doc = new Document(); >> ádoc.add(new Field("string", "value", Store.YES, >> á á áIndex.ANALYZED_NO_NORMS)); >> áNumericField nf = new NumericField("numeric", Field.Store.YES, >> á á átrue); >> ánf.setIntValue(42); >> ádoc.add(nf); >> áwriter.addDocument(doc); >> áwriter.commit(); >> >> á// make sure we can query on the numeric field >> áIndexSearcher searcher = new IndexSearcher(dir); >> áTopDocs docs = searcher.search(new TermQuery(new Term("numeric", >> á á áNumericUtils.intToPrefixCoded(42))), 1); >> áif (docs.totalHits != 1) { >> á á áthrow new AssertionError(); >> á} >> ádoc = searcher.doc(docs.scoreDocs[0].doc); >> ásearcher.close(); >> >> á// update document with new value for string field >> ádoc.removeField("string"); >> ádoc.add(new Field("string", "value2", Store.YES, >> á á áIndex.ANALYZED_NO_NORMS)); >> áwriter.updateDocument(new Term("string", "value"), doc); >> áwriter.commit(); >> >> á// search again >> ásearcher = new IndexSearcher(dir); >> ádocs = searcher.search(new TermQuery(new Term("numeric", >> á á áNumericUtils.intToPrefixCoded(42))), 1); >> áif (docs.totalHits != 1) { >> á á áthrow new AssertionError(docs.totalHits); >> á} >> >> >> That doesn't seem to work however. It seems I need to get the >> NumericField rematerialized in the document passed to >> updateDocument(). I was hoping to avoid that if possible so >> I'm looking for any suggestions someone might offer. >> >> >> >> >> >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org