}
public void consume(Collection<proj.zoie.api.DataConsumer.DataEvent<D,V>> events)
throws ZoieException {
if (_writer == null){
throw new ZoieException("Internal IndexWriter null, perhaps not started?");
}
if (events.size() > 0){
for (DataEvent<D,V> event : events){
ZoieIndexable indexable = _interpreter.convertAndInterpret(event.getData());
if (indexable.isSkip()) continue;
try {
_writer.deleteDocuments(new Term(DOCUMENT_ID_FIELD,String.valueOf(indexable.getUID())));
} catch(IOException e) {
throw new ZoieException(e.getMessage(),e);
}
IndexingReq[] reqs = indexable.buildIndexingReqs();
for (IndexingReq req : reqs){
Analyzer localAnalyzer = req.getAnalyzer();
Document doc = req.getDocument();
Field uidField = new Field(DOCUMENT_ID_FIELD,String.valueOf(indexable.getUID()),Store.NO,Index.NOT_ANALYZED_NO_NORMS);
uidField.setOmitTermFreqAndPositions(true);
doc.add(uidField);
if (localAnalyzer == null) localAnalyzer = _analyzer;
try {
_writer.addDocument(doc, localAnalyzer);
} catch(IOException e) {
throw new ZoieException(e.getMessage(),e);
}
}
}
int numdocs;
try {
// for realtime commit is not needed per lucene mailing list
//_writer.commit();
numdocs = _writer.numDocs();
} catch (IOException e) {
throw new ZoieException(e.getMessage(),e);
}
logger.info("flushed "+events.size()+" events to index, index now contains "+numdocs+" docs.");
}
}