Java 使用SolrJ客户端连接器3.6连接到Solr 1.4

Java 使用SolrJ客户端连接器3.6连接到Solr 1.4,java,maven,solr,solrj,apache-httpcomponents,Java,Maven,Solr,Solrj,Apache Httpcomponents,如何使用SolrJ 3.6连接器连接到配置了Basic Auth的Solr 1.4搜索服务器?基于: 获取相关依赖项,例如使用maven: <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>3.6.1</version>

如何使用SolrJ 3.6连接器连接到配置了Basic Auth的Solr 1.4搜索服务器?

基于:

获取相关依赖项,例如使用maven:

    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>3.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.1.2</version>
    </dependency>

org.apache.solr
索尔索尔
3.6.1
org.apache.httpcomponents
httpcore
4.2.2
org.apache.httpcomponents
httpclient
4.2.1
org.apache.httpcomponents
httpime
4.1.2
使用SolrJ 3.6和最新的Apache Http组件Http客户端连接到Solr 1.4的示例应用程序,以协商基本身份验证:

import java.io.IOException;
import java.util.Iterator;

import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HttpContext;
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.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

/**
 * Sample app
 *
 */
public class App 
{
    public static void main( String[] args ) throws SolrServerException, IOException
    {
        String url = "https://localhost:8080/solr/";
        String httpAuthUser = "solr_admin";
        String httpAuthPass= "somePassword";
            // Configure latests Apache Http Components http client
        HttpClient httpClient = new DefaultHttpClient();
        if (httpAuthUser != null && httpAuthPass != null) {
            AbstractHttpClient client = (AbstractHttpClient) httpClient;
            App a = new App();
            client.addRequestInterceptor(a.new PreEmptiveBasicAuthenticator(httpAuthUser, httpAuthPass));
          }
        // Configure XMLResponseParser as standard javabin parser does not work with 1.4
        SolrServer solr = new HttpSolrServer(url, httpClient, new XMLResponseParser());
        // Test adding some data 
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "552199");
        document.addField("name", "Gouda cheese wheel");
        document.addField("price", "49.99");
        UpdateResponse uresponse = solr.add(document);
        System.out.println("UpdateResponse"+uresponse.getStatus());
        solr.commit();

        // Query for the data just added
        SolrQuery parameters = new SolrQuery();
        parameters.set("q", "*");
        QueryResponse response = solr.query(parameters);
        SolrDocumentList list = response.getResults();
        Iterator<SolrDocument> si = list.iterator();
        System.out.println("Solr document"+list.getNumFound());
        while(si.hasNext()){
            System.out.println("Solr document"+si.next().toString());
        }
    }


    protected class PreEmptiveBasicAuthenticator implements HttpRequestInterceptor {
          private final UsernamePasswordCredentials credentials;

          public PreEmptiveBasicAuthenticator(String user, String pass) {
            credentials = new UsernamePasswordCredentials(user, pass);
          }

          public void process(HttpRequest request, HttpContext context)
              throws HttpException, IOException {
            request.addHeader(BasicScheme.authenticate(credentials,"US-ASCII",false));
          }
        }
}
import java.io.IOException;
导入java.util.Iterator;
导入org.apache.http.HttpException;
导入org.apache.http.HttpRequest;
导入org.apache.http.HttpRequestInterceptor;
导入org.apache.http.auth.UsernamePasswordCredentials;
导入org.apache.http.client.HttpClient;
导入org.apache.http.impl.auth.BasicScheme;
导入org.apache.http.impl.client.AbstractHttpClient;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.protocol.HttpContext;
导入org.apache.solr.client.solrj.SolrQuery;
导入org.apache.solr.client.solrj.SolrServer;
导入org.apache.solr.client.solrj.SolrServerException;
导入org.apache.solr.client.solrj.impl.HttpSolrServer;
导入org.apache.solr.client.solrj.impl.XMLResponseParser;
导入org.apache.solr.client.solrj.response.QueryResponse;
导入org.apache.solr.client.solrj.response.UpdateResponse;
导入org.apache.solr.common.SolrDocument;
导入org.apache.solr.common.SolrDocumentList;
导入org.apache.solr.common.SolrInputDocument;
/**
*示例应用程序
*
*/
公共类应用程序
{
公共静态void main(字符串[]args)引发SolrServerException、IOException
{
字符串url=”https://localhost:8080/solr/";
字符串httpAuthUser=“solr\u admin”;
字符串httpAuthPass=“somePassword”;
//配置最新的Apache Http组件Http客户端
HttpClient HttpClient=新的DefaultHttpClient();
如果(httpAuthUser!=null&&httpAuthPass!=null){
AbstractHttpClient=(AbstractHttpClient)httpClient;
应用程序a=新应用程序();
addRequestInterceptor(一种新的抢占式基本身份验证程序(httpAuthUser,httpAuthPass));
}
//将XMLResponseParser配置为标准javabin解析器不适用于1.4
SolrServer solr=新的HttpSolrServer(url,httpClient,新的XMLResponseParser());
//测试添加一些数据
SolrInputDocument=新的SolrInputDocument();
文件.addField(“id”,“552199”);
文件.addField(“名称”、“Gouda奶酪轮”);
文件.addField(“价格”,“49.99”);
UpdateResponse-ureResponse=solr.add(文档);
System.out.println(“UpdateResponse”+ureResponse.getStatus());
solr.commit();
//查询刚刚添加的数据
SolrQuery参数=新的SolrQuery();
参数集(“q”、“*”);
QueryResponse response=solr.query(参数);
SolrDocumentList=response.getResults();
迭代器si=list.Iterator();
System.out.println(“Solr文档”+list.getNumFound());
while(si.hasNext()){
System.out.println(“Solr文档”+si.next().toString());
}
}
受保护类PreEmptiveBasicAuthenticator实现HttpRequestInterceptor{
私有最终用户名密码凭据凭据;
公共抢占基本验证程序(字符串用户,字符串传递){
凭证=新用户名密码凭证(用户,通过);
}
公共无效进程(HttpRequest请求、HttpContext上下文)
抛出HttpException,IOException{
addHeader(BasicScheme.authenticate(凭证,“US-ASCII”,false));
}
}
}