当前位置: 首页 > 知识库问答 >
问题:

访问SolrCloud时的SolrJ-NPE

施默
2023-03-14
public static void main(String[] args) {
    String zkHostString = "192.168.56.99:2181";
    SolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();
    List<MyBean> beans = new ArrayList<>();
    for(int i = 0; i < 10000 ; i++) {
        // creating a bunch of MyBean to be indexed
        // and temporarily storing them in a List
        // no Solr operations performed here
    }

    System.out.println("Adding...");
    try {
        solr.addBeans("myCollection", beans);
    } catch (IOException | SolrServerException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    System.out.println("Committing...");
    try {
        solr.commit("myCollection");
    } catch (SolrServerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

由于以下异常,此代码失败

Exception in thread "main" java.lang.NullPointerException
    at org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:1175)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:1057)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:160)
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:106)
    at org.apache.solr.client.solrj.SolrClient.addBeans(SolrClient.java:357)
    at org.apache.solr.client.solrj.SolrClient.addBeans(SolrClient.java:312)
    at com.togather.solr.testing.SolrIndexingTest.main(SolrIndexingTest.java:83)

这是异常的完整stacktrace。我刚刚从一个Solr独立安装“升级”到一个SolrCloud(使用一个外部Zookeeper实例,而不是嵌入式实例)。在独立的Solr中,相同的代码(只是有一些小的区别,比如主机URL)可以很好地工作。

NPE让我进入SolrJ库,我不知道。

共有1个答案

曹旭东
2023-03-14

查看您的代码,我建议首先指定默认集合。

CloudSolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();
solr.setDefaultCollection("myCollection");

关于您正在经历的NPE,很可能是由于网络错误造成的。

在这些行中,您的异常由for循环引发:for(DocCollectionext:requestedCollections)

  if (wasCommError) {
    // it was a communication error. it is likely that
    // the node to which the request to be sent is down . So , expire the state
    // so that the next attempt would fetch the fresh state
    // just re-read state for all of them, if it has not been retired
    // in retryExpiryTime time
    for (DocCollection ext : requestedCollections) {
      ExpiringCachedDocCollection cacheEntry = collectionStateCache.get(ext.getName());
      if (cacheEntry == null) continue;
      cacheEntry.maybeStale = true;
    }
    if (retryCount < MAX_STALE_RETRIES) {//if it is a communication error , we must try again
      //may be, we have a stale version of the collection state
      // and we could not get any information from the server
      //it is probably not worth trying again and again because
      // the state would not have been updated
      return requestWithRetryOnStaleState(request, retryCount + 1, collection);
    }
  }
 类似资料:
  • Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http Get 操作提出查找请求,并得到 XML 格式的返回结果。这里主要讲解下通过 http Get 请求这种方式。 Apache 为我们提供了 Solrj 这个工具,我们只需要简单的导入相关包

  • 我正在尝试使用solrj CloudSolrClient连接到solrCloud,但出现了错误。 用于直接调用单个solr节点,现在切换到solrcloud。我已经尝试了各种不同的url格式,如在线文档中指定的。 使用以下zkHost字符串时,我会发现各种错误。 主持人:2181 2019-08-21 15:53:17错误o. a. c. c.C.[.[.[.[.a. d. n. s.超文本传输协

  • 使用指南 - 数据报告 - 流量分析 - 访问时长的计算 访问时长指访客每次在网站访问所停留的时长,即从进入第一个页面到离开最后一个页面的时长。 在传统统计工具下,最后一个页面的关闭时间很难得到,百度统计在技术上进行了升级,能够获取到该页面的关闭时间。 然而用户行为具有多样性,当用户快速关闭浏览器、长时间未对页面进行操作或其它网络原因导致的时候,系统会无法获取到页面的关闭信息,从而使最后一个页面的

  • 我们正在使用Solrj在Solr上构建一个包装器。 此包装器将允许客户端指定集合名称,然后使用SolrJ包装器与该集合交互以进行插入/更新/查询。 有人能给我指一下SolrJ集合示例/API吗?

  • 我们希望将SolrCloud与单独的ZooKeeper实例一起使用,但需要一些建议。我们的情况是-多个集合,每个集合都有多个分片在Ubuntu 13、Solr 4.7.0、单独的ZooKeeper 3.4.5、AWS中的OpenJDK 7上运行 Jetty还是Tomcat?Jetty是内置的,需要更少的配置,但是除非指定“nohup”,否则当您退出运行SolrCloud的java命令或断开SSH会