【问题标题】:Error in executing solr search query from a CloudSolrServer object从 CloudSolrServer 对象执行 solr 搜索查询时出错
【发布时间】:2014-05-19 07:28:17
【问题描述】:

这里我试图触发一个 solr 搜索查询,我使用 CloudSolrServer 类传递 zookeeper 实例,然后创建一个 SolrQuery 对象的实例进行搜索。

        CloudSolrServer solr = new CloudSolrServer("HOST_NAME:PORT");

        System.out.println(solr.getZkStateReader());
        SolrQuery solrQuery = new SolrQuery();

        solrQuery.set("q", "abc");
        solrQuery.addFilterQuery("type:*");
        solrQuery.set("defType", "edismax");
        solrQuery.set("start", 0);
        solrQuery.set("rows", 10);
        solrQuery.set("qf", "name^10.0 description^5.0");
        solrQuery.addSortField("name_sort", SolrQuery.ORDER.asc);

        QueryResponse response = solr.query(solrQuery);

当我运行它时,我收到了这个错误:

null
org.apache.solr.client.solrj.SolrServerException: Error executing query
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:98)
    at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
    at SolrCloud_Example.main(SolrCloud_Example.java:40)
Caused by: java.lang.RuntimeException
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:115)
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:83)
    at org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:138)
    at org.apache.solr.client.solrj.impl.CloudSolrServer.connect(CloudSolrServer.java:140)
    at org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:165)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:90)
    ... 2 more

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 最后一行的params 来自哪里?不应该是solrQuery吗?
  • 抱歉这个错误,我现在已经编辑了。但我的问题还是一样。

标签: solr solrj


【解决方案1】:

我也遇到过同样的例外。结果,这种连接对我来说是可行的: CloudSolrServer solrServer = new CloudSolrServer("c-node3:2181/solr");

/solr到底

【讨论】:

    【解决方案2】:

    使用CloudSolrServer时,需要设置默认集合值。

    此外,CloudSolrServer query() 方法实际上并不将 SolrQuery 作为参数;它需要 SolrParams。您可以从命名列表创建 SolrParams,这正是 SolrQuery 可以做到的。

    所以你的代码看起来像这样:

    CloudSolrServer solr = new CloudSolrServer("HOST_NAME:PORT");
    solr.setDefaultCollection("your_collection");
    
    SolrQuery solrQuery = new SolrQuery();
    
    solrQuery.set("q", "abc");
    solrQuery.addFilterQuery("type:*");
    solrQuery.set("defType", "edismax");
    solrQuery.set("start", 0);
    solrQuery.set("rows", 10);
    solrQuery.set("qf", "name^10.0 description^5.0");
    solrQuery.addSortField("name_sort", SolrQuery.ORDER.asc);
    
    SolrParams params = SolrParams.toSolrParams(solrQuery.toNamedList());
    QueryResponse response = solr.query(params);
    

    然后您可以使用响应来取回您的结果。

    【讨论】:

    • 您好 cahilltr,感谢您的回复。现在我设置了默认集合值,但仍然出现此错误:org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /live_nodes 我可能错误地设置了默认集合值,你能请告诉我如何知道它或通过查看错误代码是否还有其他内容。
    • Simanchala,我的第一个想法是想知道 Zookeeper 是否真的在运行;但我猜那不是问题。要查看 Zookeeper 知道的所有集合和活动节点,您可以执行以下操作:ZkClient = new SolrZkClient(host:port, timeout); solrZK = solrZkClient.getSolrZooKeeper(); System.out.println(solrZK.getChildren("/live_nodes", true)); 您可以使用“/collections”执行相同操作以获取所有集合。
    • Cahilltr,我认为我的 Zookeeper 配置有问题。因为我尝试使用 /live_nodes 和 /collections 并且每次它显示类似的错误消息,例如 org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /live_nodesorg.apache.zookeeper .KeeperException$NoNodeException: KeeperErrorCode = NoNode for /collections 。我试图弄清楚 zookeeper solr 设置是否有任何问题。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 2015-09-27
    • 2021-04-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多