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 Christopher Condit <co...@sdsc.edu> on 2011/04/15 03:02:56 UTC
best practice for reusing documents with multi-valued fields
I know that it's best practice to reuse the Document object when
indexing, but I'm curious how multi-valued fields affect this. I tried
this before indexing each document:
doc.removeFields(myMultiValuedField);
for (String fieldName: fieldNames) {
Field field= doc.getField(field);
if (null != field) {
field.setValue("");
} else {
System.out.println("null field");
}
}
And it seems that the null fields (which I had removed) are just
accumulating. Is there a better way to reuse a document with
multi-valued fields?
Thanks,
-Chris
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
Re: best practice for reusing documents with multi-valued fields
Posted by Anshum <an...@gmail.com>.
Hi Chris,
So doc.removeFields works fine, just tried it again. You could try using an
approach on the lines of the one mentioned below.
*--snip--*
IndexWriter iw = new IndexWriter(indexDir, new
StandardAnalyzer(Version.LUCENE_30),true, MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.add(getField(FIELD1, "aa"));
doc.add(getField(FIELD1, "bb"));
doc.add(getField(FIELD2, "cc"));
iw.addDocument(doc);
doc.removeFields("field1");
doc.add(getField(FIELD1, "aaa"));
doc.add(getField(FIELD1, "bbb"));
doc.add(getField(FIELD2, "ccc"));
iw.addDocument(doc);
IndexReader ir = iw.getReader();
IndexSearcher is = new IndexSearcher(ir);
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("field1", "aa")), Occur.MUST);
ScoreDoc[] sd = is.search(query, 10).scoreDocs;
for(ScoreDoc scoreDoc:sd){
System.out.println(ir.document(scoreDoc.doc));
}
is.close();
ir.close();
iw.close();
*--Snip--*
--
Anshum Gupta
http://ai-cafe.blogspot.com
On Fri, Apr 15, 2011 at 6:32 AM, Christopher Condit <co...@sdsc.edu> wrote:
> I know that it's best practice to reuse the Document object when
> indexing, but I'm curious how multi-valued fields affect this. I tried
> this before indexing each document:
>
> doc.removeFields(myMultiValuedField);
> for (String fieldName: fieldNames) {
> Field field= doc.getField(field);
> if (null != field) {
> field.setValue("");
> } else {
> System.out.println("null field");
> }
> }
>
> And it seems that the null fields (which I had removed) are just
> accumulating. Is there a better way to reuse a document with
> multi-valued fields?
>
> Thanks,
> -Chris
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>