package uk.ac.shef.dcs.jate.solr; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.solr.core.SolrCore; import org.apache.solr.schema.CopyField; import org.apache.solr.search.SolrIndexSearcher; import uk.ac.shef.dcs.jate.JATEException; import uk.ac.shef.dcs.jate.model.JATETerm; import uk.ac.shef.dcs.jate.solr.TermRecognitionRequestHandler.Algorithm; import uk.ac.shef.dcs.jate.util.SolrUtil; /** * A composite Term Recognition (TR) processor implemented all methods by * delegating them to different TR processor */ public class CompositeTermRecognitionProcessor implements TermRecognitionProcessor { private Collection<TermRecognitionProcessor> processors = new ArrayList<TermRecognitionProcessor>(); public static final Float DEFAULT_BOOST_VALUE = 1.0F; @Override public Boolean candidateExtraction(SolrCore core, String jatePropertyFile) throws IOException, JATEException { SolrIndexSearcher indexSearcher = core.getSearcher().get(); IndexWriter writerIn = null; try { writerIn = core.getSolrCoreState().getIndexWriter(core).get(); Map<String,List<CopyField>> copyFields = core.getLatestSchema().getCopyFieldsMap(); for (int i=0; i<indexSearcher.maxDoc(); i++) { Document doc = indexSearcher.doc(i); SolrUtil.copyFields(copyFields, DEFAULT_BOOST_VALUE, doc); writerIn.updateDocument(new Term("id",doc.get("id")), doc); } writerIn.commit(); return true; } finally { indexSearcher.close(); if (writerIn != null) { writerIn.close(); } } } @Override public List<JATETerm> rankingAndFiltering(SolrCore core, String jatePropertyFile, Map<String, String> params, Algorithm algorithm) throws IOException, JATEException { for (TermRecognitionProcessor termRecognitionProcessor : processors) { List<JATETerm> terms = termRecognitionProcessor.rankingAndFiltering(core, jatePropertyFile, params, algorithm); if (terms != null) { return terms; } } return null; } @Override public void initialise(Map<String, String> params) throws JATEException { return; } @Override public Boolean export(List<JATETerm> termsResults) throws IOException { for (TermRecognitionProcessor termRecognitionProcessor : processors) { Boolean isSuccess = termRecognitionProcessor.export(termsResults); if (isSuccess != null) { return isSuccess; } } return null; } /** * Provides access to the term recognition "processors" list * * @return a mutable ordered collection of processors */ public Collection<TermRecognitionProcessor> getProcessors() { return processors; } }