You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.8 KiB
80 lines
2.8 KiB
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.Writer;
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
import net.yacy.cora.document.UTF8;
|
|
import net.yacy.cora.protocol.RequestHeader;
|
|
import net.yacy.kelondro.logging.Log;
|
|
import net.yacy.search.Switchboard;
|
|
import net.yacy.search.solr.EmbeddedSolrConnector;
|
|
import net.yacy.search.solr.SolrServlet;
|
|
|
|
import org.apache.solr.common.util.FastWriter;
|
|
import org.apache.solr.request.SolrQueryRequest;
|
|
import org.apache.solr.response.QueryResponseWriter;
|
|
import org.apache.solr.response.SolrQueryResponse;
|
|
import org.apache.solr.response.XMLResponseWriter;
|
|
|
|
import de.anomic.server.serverObjects;
|
|
import de.anomic.server.serverSwitch;
|
|
|
|
public class select {
|
|
|
|
private static SolrServlet solrServlet = new SolrServlet();
|
|
private static final QueryResponseWriter responseWriter = new XMLResponseWriter();
|
|
|
|
static {
|
|
try {solrServlet.init(null);} catch (ServletException e) {}
|
|
}
|
|
|
|
/**
|
|
* a query to solr, for documentation of parameters see:
|
|
* http://lucene.apache.org/solr/api-3_6_0/doc-files/tutorial.html
|
|
* and
|
|
* http://wiki.apache.org/solr/SolrQuerySyntax
|
|
* @param header
|
|
* @param post
|
|
* @param env
|
|
* @param out
|
|
* @return
|
|
*/
|
|
public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env, final OutputStream out) {
|
|
|
|
// this uses the methods in the jetty servlet environment and can be removed if jetty in implemented
|
|
Switchboard sb = (Switchboard) env;
|
|
|
|
// check if user is allowed to search (can be switched in /ConfigPortal.html)
|
|
final boolean searchAllowed = sb.getConfigBool("publicSearchpage", true) || sb.verifyAuthentication(header);
|
|
if (!searchAllowed) return null;
|
|
|
|
// get the embedded connector
|
|
EmbeddedSolrConnector connector = (EmbeddedSolrConnector) sb.index.getLocalSolr();
|
|
if (connector == null) return null;
|
|
if (post == null) return null;
|
|
if (!post.containsKey("df")) post.put("df", "text_t"); // set default field to all fields
|
|
SolrQueryRequest req = connector.request(post.toSolrParams());
|
|
SolrQueryResponse response = connector.query(req);
|
|
Exception e = response.getException();
|
|
if (e != null) {
|
|
Log.logException(e);
|
|
return null;
|
|
}
|
|
|
|
// write the result directly to the output stream
|
|
Writer ow = new FastWriter(new OutputStreamWriter(out, UTF8.charset));
|
|
try {
|
|
responseWriter.write(ow, req, response);
|
|
ow.flush();
|
|
} catch (IOException e1) {
|
|
} finally {
|
|
req.close();
|
|
try {ow.close();} catch (IOException e1) {}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|