Java无法向Solr添加或修改索引

搭建好的Solr服务,使用Java对其进行增删改查的时候都没有问题。后来出于安全考虑,对Solr配置了用户名及密码。配置完成后,查询时没有问题,但在新增和修改时,报 IOException occured when talking to server at: xxxxx异常。

在网上查了一下,说是配置完用户名和密码之后,需要修改原来的链接,所以我从网上找来子Java连接Solr的URL为"http://admin:123456@63.1.20.23:8090/solr/test_core"

结果还是不行。

后来,通过文档发现事情没这么简单,需要配置两个类,一个负责拦截,一个负责生成。

先发一下拦截器的代码:

import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.AuthState;
import org.apache.http.auth.Credentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpCoreContext;

public class SolrAuthInterceptor implements HttpRequestInterceptor {

    @Override
    public void process(final HttpRequest request, final HttpContext context) {
        AuthState authState = (AuthState) context.getAttribute(HttpClientContext.TARGET_AUTH_STATE);
        if (authState.getAuthScheme() == null) {
            CredentialsProvider provider =
                    (CredentialsProvider) context.getAttribute(HttpClientContext.CREDS_PROVIDER);
            HttpHost httpHost = (HttpHost) context.getAttribute(HttpCoreContext.HTTP_TARGET_HOST);
            AuthScope scope = new AuthScope(httpHost.getHostName(), httpHost.getPort());
            Credentials credentials = provider.getCredentials(scope);
            authState.update(new BasicScheme(), credentials);
        }
    }
}

接下来是HttpSolrClient的生成代码:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import java.net.URI;

public class SolrConfig {

    public static HttpSolrClient solrClient() {
        CredentialsProvider provider = new BasicCredentialsProvider();
        // 注意,这里的地址比较简单,不要按照网上说的那种加用户名和密码
        final URI uri = URI.create("http://127.0.0.1:8983/solr/");
        provider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()),
                new UsernamePasswordCredentials("admin", "123456"));
        HttpClientBuilder builder = HttpClientBuilder.create();
        // 刚才的拦截器,用于验证用户名和密码
        builder.addInterceptorFirst(new SolrAuthInterceptor());
        builder.setDefaultCredentialsProvider(provider);
        CloseableHttpClient httpClient = builder.build();
        // 注意,这里的地址比较简单,不要按照网上说的那种加用户名和密码
        return new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/").withHttpClient(httpClient).build();
    }
}

使用的话就比较简单了:

static void add_new(){
        String solrCore = "test_core";
        HttpSolrClient solr = SolrConfig.solrClient();
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "1508");
        document.addField("name", "测试-08");
        document.addField("path", "/test/a8");
        try{
            solr.add(solrCore,document);
            solr.commit(solrCore);
        }catch (Exception e){
            e.printStackTrace();
        }

}

就这样吧!

我是来自 北京天码科技的卢泽。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值