From 7cd302de3e38001757b013eb0c698e0cd83490f7 Mon Sep 17 00:00:00 2001 From: orbiter Date: Fri, 24 Aug 2012 12:18:30 +0200 Subject: [PATCH] omit xml parsing when using the embedded solr server --- .../federated/solr/EmbeddedSolrConnector.java | 12 +++++++++ .../federated/solr/RemoteSolrConnector.java | 24 ++++++++++++++++++ .../federated/solr/SolrServerConnector.java | 25 +++---------------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/source/net/yacy/cora/services/federated/solr/EmbeddedSolrConnector.java b/source/net/yacy/cora/services/federated/solr/EmbeddedSolrConnector.java index 3cc2a96e1..dec9e76b8 100644 --- a/source/net/yacy/cora/services/federated/solr/EmbeddedSolrConnector.java +++ b/source/net/yacy/cora/services/federated/solr/EmbeddedSolrConnector.java @@ -27,7 +27,9 @@ import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; +import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; +import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; @@ -155,6 +157,16 @@ public class EmbeddedSolrConnector extends SolrServerConnector implements SolrCo return rsp; } + public QueryResponse query(SolrParams params) throws IOException { + try { + return server.query(params); + } catch (SolrServerException e) { + throw new IOException(e); + } catch (Throwable e) { + throw new IOException("Error executing query", e); + } + } + public static void main(String[] args) { File solr_config = new File("defaults/solr"); File storage = new File("DATA/INDEX/webportal/SEGMENTS/text/solr/"); diff --git a/source/net/yacy/cora/services/federated/solr/RemoteSolrConnector.java b/source/net/yacy/cora/services/federated/solr/RemoteSolrConnector.java index b89f841c3..8d99225f9 100644 --- a/source/net/yacy/cora/services/federated/solr/RemoteSolrConnector.java +++ b/source/net/yacy/cora/services/federated/solr/RemoteSolrConnector.java @@ -50,7 +50,14 @@ import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HttpContext; +import org.apache.solr.client.solrj.ResponseParser; +import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.impl.XMLResponseParser; +import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.common.params.SolrParams; +import org.apache.solr.common.util.NamedList; public class RemoteSolrConnector extends SolrServerConnector implements SolrConnector { @@ -148,6 +155,23 @@ public class RemoteSolrConnector extends SolrServerConnector implements SolrConn this.terminate(); } + public QueryResponse query(SolrParams params) throws IOException { + try { + QueryRequest request = new QueryRequest(params); + ResponseParser responseParser = new XMLResponseParser(); + request.setResponseParser(responseParser); + long t = System.currentTimeMillis(); + NamedList result = server.request(request); + QueryResponse response = new QueryResponse(result, server); + response.setElapsedTime(System.currentTimeMillis() - t); + return response; + } catch (SolrServerException e) { + throw new IOException(e); + } catch (Throwable e) { + throw new IOException("Error executing query", e); + } + } + public String getAdminInterface() { final InetAddress localhostExternAddress = Domains.myPublicLocalIP(); final String localhostExtern = localhostExternAddress == null ? "127.0.0.1" : localhostExternAddress.getHostAddress(); diff --git a/source/net/yacy/cora/services/federated/solr/SolrServerConnector.java b/source/net/yacy/cora/services/federated/solr/SolrServerConnector.java index fe05ca59f..81df27270 100644 --- a/source/net/yacy/cora/services/federated/solr/SolrServerConnector.java +++ b/source/net/yacy/cora/services/federated/solr/SolrServerConnector.java @@ -28,22 +28,18 @@ import java.util.List; import net.yacy.kelondro.logging.Log; -import org.apache.solr.client.solrj.ResponseParser; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.impl.XMLResponseParser; import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; -import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.SolrParams; -import org.apache.solr.common.util.NamedList; -public class SolrServerConnector extends AbstractSolrConnector implements SolrConnector { +public abstract class SolrServerConnector extends AbstractSolrConnector implements SolrConnector { protected SolrServer server; protected int commitWithinMs; // max time (in ms) before a commit will happen @@ -211,23 +207,8 @@ public class SolrServerConnector extends AbstractSolrConnector implements SolrCo final SolrDocumentList docs = rsp.getResults(); return docs; } - - public QueryResponse query(SolrParams params) throws IOException { - try { - QueryRequest request = new QueryRequest(params); - ResponseParser responseParser = new XMLResponseParser(); - request.setResponseParser(responseParser); - long t = System.currentTimeMillis(); - NamedList result = server.request(request); - QueryResponse response = new QueryResponse(result, server); - response.setElapsedTime(System.currentTimeMillis() - t); - return response; - } catch (SolrServerException e) { - throw new IOException(e); - } catch (Throwable e) { - throw new IOException("Error executing query", e); - } - } + + abstract public QueryResponse query(SolrParams params) throws IOException; private final char[] queryIDTemplate = "id:\" \"".toCharArray();