【问题标题】:SolrJ CloudSolrClient connection errorSolrJ CloudSolrClient 连接错误
【发布时间】:2018-08-28 11:30:55
【问题描述】:

我正在努力使用 Solrj 进行索引。

我想使用 SolrCloud,我这样设置我的连接:

SolrClient client = new CloudSolrClient.Builder().withSolrUrl("http://localhost:8983/solr/collectioname").build();
	

我有这个错误。我在这里发帖之前检查了evruwhere,但我无法解决它

Exception in thread "main" java.lang.RuntimeException: Couldn't initialize a HttpClusterStateProvider (is/are the Solr server(s), [http://localhost:8983/solr/collectioname], down?)
	at org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.build(CloudSolrClient.java:1496)
	at indexsolr.<init>(indexsolr.java:29)
	at LoadData.toIndex(LoadData.java:100)
	at LoadData.loadDocuments(LoadData.java:72)
	at IndexLaunch.main(IndexLaunch.java:12)
Caused by: org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr/collectioname: Expected mime type application/octet-stream but got text/html. <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /solr/collectioname/admin/collections. Reason:
<pre>    Not Found</pre></p>
</body>
</html>

	at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:607)
	at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:255)
	at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244)
	at org.apache.solr.client.solrj.SolrClient.request(SolrClient.java:1219)
	at org.apache.solr.client.solrj.impl.HttpClusterStateProvider.fetchLiveNodes(HttpClusterStateProvider.java:189)
	at org.apache.solr.client.solrj.impl.HttpClusterStateProvider.<init>(HttpClusterStateProvider.java:64)
	at org.apache.solr.client.solrj.impl.CloudSolrClient$Builder.build(CloudSolrClient.java:1494)
	... 4 more

【问题讨论】:

    标签: apache indexing solr solrj


    【解决方案1】:

    如上一个答案所述,SolrJ 使用的 URL 中没有集合名称(我应该更直接地指出):

    final String solrUrl = "http://localhost:8983/solr";
    return new HttpSolrClient.Builder(solrUrl)
        .withConnectionTimeout(10000)
        .withSocketTimeout(60000)
        .build();
    

    【讨论】:

      【解决方案2】:

      对于 SolrCloud,您需要使用 CloudSolrClient。根据您使用的 Solr 版本,您可以创建 CloudSolrClient 的对象,也可以使用 CloudSolrClient.Builder

      【讨论】:

        【解决方案3】:

        我就是这样做的。 Solr cloud 只需要将 url 列表作为参数,而不仅仅是 String url。

        private static final String BASE_SOLR_URL = "http://localhost:8983/solr"; 
        // or initialize a list of solr instances urls 
        
        @Bean(name = "solrCloudClient")
        public static CloudSolrClient getCloudConnection() {
            System.out.println("----Initializing cloud Solr Connection---");
            List<String> solrCloudUrls = Arrays.asList(BASE_SOLR_URL); // or list of urls
        
            CloudSolrClient client = new CloudSolrClient.Builder(solrCloudUrls).build();
            client.setParser(new XMLResponseParser());
            return client;
        }
        

        【讨论】:

          猜你喜欢
          • 2019-12-27
          • 1970-01-01
          • 2014-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多