yu wrote:
Hi,
I am trying to use the latest 2.3 API on Field to improve the
indexing performance by reusing Documents and Fields. After
reading lucene-java wiki and the java doc on Field, I have a couple
of questions about the comment in Field.setValue(), namely,
"Note that you should only use this method after the Field has been
consumed (ie, the Document containing this Field has been added to
the index)":
1. Does "consumed" here include IndexWriter.deleteDocument(...)
and IndexWriter.updateDocument(...)?
Yes. Actually, just add/updateDocument.
2. Why does it require that the Field has been consumed first
before it can be modified? For example, I may pre-allocate in a
constructor a Document and related fields with some default values
but do not (or cannot) add the document. Before I add my first
document, I need to set the fields with valid values.
It looks like the new Lucene core would null some of the fields if
I do so. I do not understand the logic behind the requirement.
That use case is fine. You can absolutely change its value before
it's consumed when the un-consumed value doesn't matter to you. That
pre-allocation is a normal & fine use case, and fields should not be
null'd by Lucene.
The warning should instead state that "if the field holds a real
value, then make sure it's consumed first before you change it".
So, for example, if you add docs to a queue, and then use a thread
pool to pull docs from that queue and call addDocument on them, you
can't re-use the fields in the Document until a thread has added it
to the index.
Mike
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]