package de.fhopf.lucenesolrtalk.solr; import com.google.common.collect.Collections2; import de.fhopf.lucenesolrtalk.Talk; import de.fhopf.lucenesolrtalk.TalkFromFile; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.common.SolrInputDocument; import java.io.File; import java.io.IOException; import java.util.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.impl.HttpSolrServer; /** * Indexes files in Solr. */ public class Indexer { private final SolrServer server; private final Log log = LogFactory.getLog(Indexer.class); public Indexer(SolrServer server) { this.server = server; } public void index(Collection<Talk> talks) throws IOException, SolrServerException { // TODO could also be transformed using guava List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); for (Talk talk: talks) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("path", talk.path); doc.addField("title", talk.title); doc.addField("date", talk.date); doc.addField("content", talk.content); doc.addField("organizer", talk.organizer); for (String category: talk.categories) { doc.addField("category", category); } for (String speaker: talk.speakers) { doc.addField("speaker", speaker); } docs.add(doc); } server.add(docs); server.commit(); } public void clearIndex() throws SolrServerException, IOException { server.deleteByQuery("*:*"); } public static void main(String [] args) throws IOException, SolrServerException { if (args.length != 2) { System.out.println("Usage: java " + Indexer.class.getCanonicalName() + " <solrUrl> <dataDir>"); System.exit(-1); } SolrServer server = new HttpSolrServer(args[0]); List<File> files = Arrays.asList(new File(args[1]).listFiles()); Collection<Talk> talks = Collections2.transform(files, new TalkFromFile()); Indexer indexer = new Indexer(server); indexer.clearIndex(); indexer.index(talks); } }