package lux.solr; import static lux.index.IndexConfiguration.*; import java.io.IOException; import java.util.List; import lux.IndexTestSupportBase; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.common.SolrInputDocument; public class CloudIndexSupport extends IndexTestSupportBase { SolrServer control; List<SolrServer> clients; CloudIndexSupport (SolrServer control, List<SolrServer> clients) { super (INDEX_QNAMES|INDEX_PATHS|STORE_DOCUMENT|INDEX_FULLTEXT|INDEX_EACH_PATH); //indexer.getConfiguration().addField(new XPathField("doctype", "name(/*)", null, Store.YES, Type.STRING)); //indexer.getConfiguration().addField(new XPathField("title", "/*/TITLE | /SPEECH/LINE[1]", null, Store.YES, Type.STRING)); //indexer.getConfiguration().addField(new XPathField("title_multi", "//TITLE", null, Store.YES, Type.STRING)); //indexer.getConfiguration().addField(new XPathField("actnum", "/*/@act", null, Store.YES, Type.INT)); //indexer.getConfiguration().addField(new XPathField("scnlong", "/*/@scene", null, Store.YES, Type.LONG)); this.clients = clients; this.control = control; } @Override protected void addDocument(String uri, String xml) throws IOException { int which = (uri.toString().hashCode() & 0x7fffffff) % clients.size(); SolrServer client = clients.get(which); SolrInputDocument doc = new SolrInputDocument(); doc.addField("lux_uri", uri); doc.addField("lux_xml", xml); try { client.add(doc); control.add(doc); } catch (SolrServerException e) { throw new IOException(e); } } @Override protected void commit() throws IOException { try { control.commit(); for (SolrServer client : clients) { client.commit(); } } catch (SolrServerException e) { throw new IOException (e); } } }