Non-stored fields are not copied in writer.addDocument()?
---------------------------------------------------------
Key: LUCENE-1881
URL: https://issues.apache.org/jira/browse/LUCENE-1881
Project: Lucene - Java
Issue Type: Bug
Components: Store
Affects Versions: 2.4.1
Environment: Linux
Reporter: Wai Wong
Priority: Critical
We would like to modified stored documents properties. The method is to use
IndexReader to open all files, modified some fields, and copy the document via
addDocument() of IndexWriter to another index. But all fields that are created
using Field.Store.NO are no longer available for searching.
Sample code in jsp is attached:
<%@ page language="java"
import="org.apache.lucene.analysis.standard.StandardAnalyzer;"%>
<%@ page language="java" import="org.apache.lucene.document.*;"%>
<%@ page language="java" import="org.apache.lucene.index.*;"%>
<%@ page language="java" import="org.apache.lucene.search.*;"%>
<%@ page contentType="text/html; charset=utf8" %>
<%
// create for testing
IndexWriter writer = new IndexWriter("/opt/wwwroot/351/Index/test", new
StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc.add(new Field("A", "1234", Field.Store.NO , Field.Index.NOT_ANALYZED));
doc.add(new Field("B", "abcd", Field.Store.NO , Field.Index.NOT_ANALYZED));
writer.addDocument(doc);
writer.close();
// check ok
Query q = new TermQuery(new Term("A", "1234"));
Searcher s = new IndexSearcher("/opt/wwwroot/351/Index/test");
Hits h = s.search(q);
out.println("# of document found is " + h.length()); // it is ok
// update the document to change or remove a field
IndexReader r = IndexReader.open("/opt/wwwroot/351/Index/test");
doc = r.document(0);
r.deleteDocument(0);
r.close();
doc.removeField("B");
writer = new IndexWriter("/opt/wwwroot/351/Index/test1", new
StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
writer.addDocument(doc);
writer.optimize();
writer.close();
// test again
s = new IndexSearcher("/opt/wwwroot/351/Index/test1");
h = s.search(q);
out.println("<P># of document found is now " + h.length());
r = IndexReader.open("/opt/wwwroot/351/Index/test1");
out.println("<P> max Doc is " + r.maxDoc());
%>
--
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: [email protected]
For additional commands, e-mail: [email protected]