All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.solr.servlet.DirectSolrConnection Maven / Gradle / Ivy

There is a newer version: 9.7.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.solr.servlet;

import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.response.BinaryResponseWriter;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.SolrQueryResponse;

/**
 * DirectSolrConnection provides an interface to Solr that is similar to the HTTP interface, but
 * does not require an HTTP connection.
 *
 * 

This class is designed to be as simple as possible and allow for more flexibility in how you * interface to Solr. * * @since solr 1.2 */ public class DirectSolrConnection { protected final SolrCore core; protected final SolrRequestParsers parser; /** Initialize using an explicit SolrCore */ public DirectSolrConnection(SolrCore c) { core = c; parser = new SolrRequestParsers(c.getSolrConfig()); } /** * For example: * *

String json = solr.request( "/select?qt=dismax&wt=json&q=...", null ); String xml = * solr.request( "/select?qt=dismax&wt=xml&q=...", null ); String xml = solr.request( * "/update", "<add><doc><field ..." ); */ public String request(String pathAndParams, String body) throws Exception { String path = null; SolrParams params = null; int idx = pathAndParams.indexOf('?'); if (idx > 0) { path = pathAndParams.substring(0, idx); params = SolrRequestParsers.parseQueryString(pathAndParams.substring(idx + 1)); } else { path = pathAndParams; params = new MapSolrParams(new HashMap<>()); } return request(path, params, body); } public String request(String path, SolrParams params, String body) throws Exception { // Extract the handler from the path or params SolrRequestHandler handler = core.getRequestHandler(path); if (handler == null) { if ("/select".equals(path) || "/select/".equalsIgnoreCase(path)) { if (params == null) params = new MapSolrParams(new HashMap<>()); String qt = params.get(CommonParams.QT); handler = core.getRequestHandler(qt); if (handler == null) { throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "unknown handler: " + qt); } } } if (handler == null) { throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "unknown handler: " + path); } return request(handler, params, body); } public String request(SolrRequestHandler handler, SolrParams params, String body) throws Exception { if (params == null) params = new MapSolrParams(new HashMap<>()); // Make a stream for the 'body' content List streams = new ArrayList<>(1); if (body != null && body.length() > 0) { streams.add(new ContentStreamBase.StringStream(body)); } SolrQueryRequest req = null; try { req = parser.buildRequestFrom(core, params, streams); SolrQueryResponse rsp = new SolrQueryResponse(); SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, rsp)); core.execute(handler, req, rsp); if (rsp.getException() != null) { throw rsp.getException(); } // Now write it out QueryResponseWriter responseWriter = core.getQueryResponseWriter(req); if (responseWriter instanceof BinaryResponseWriter) { return ((BinaryResponseWriter) responseWriter).serializeResponse(req, rsp); } else { StringWriter out = new StringWriter(); responseWriter.write(out, req, rsp); return out.toString(); } } finally { if (req != null) { req.close(); SolrRequestInfo.clearRequestInfo(); } } } /** * Use this method to close the underlying SolrCore. * * @since solr 1.3 */ public void close() { core.close(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy