从CloudSolrServer对象执行solr搜索查询时出错

从CloudSolrServer对象执行solr搜索查询时出错,solr,solrj,Solr,Solrj,在这里,我试图启动一个solr搜索查询,我使用CloudSolrServer类传递zookeeper实例,然后创建一个SolrQuery对象的实例进行搜索 CloudSolrServer solr = new CloudSolrServer("HOST_NAME:PORT"); System.out.println(solr.getZkStateReader()); SolrQuery solrQuery = new SolrQuery();

在这里,我试图启动一个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
null
org.apache.solr.client.solrj.SolrServerException:执行查询时出错
位于org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:98)
位于org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
在SolrCloud_Example.main(SolrCloud_Example.java:40)
原因:java.lang.RuntimeException
位于org.apache.solr.common.cloud.SolrZkClient.(SolrZkClient.java:115)
位于org.apache.solr.common.cloud.SolrZkClient.(SolrZkClient.java:83)
位于org.apache.solr.common.cloud.ZkStateReader。(ZkStateReader.java:138)
位于org.apache.solr.client.solrj.impl.CloudSolrServer.connect(CloudSolrServer.java:140)
位于org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:165)
位于org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:90)
... 还有两个

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

使用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);

然后可以使用response返回结果。

使用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);

然后,您可以使用response返回结果。

我也遇到了同样的异常。因此,这种联系对我来说是可行的: CloudSolrServer solrServer=新的CloudSolrServer(“c-node3:2181/solr


/solr最后

我遇到了同样的例外。因此,这种联系对我来说是可行的: CloudSolrServer solrServer=新的CloudSolrServer(“c-node3:2181/solr


/solr最后一行的
参数从哪里来?是不是应该是
solrQuery
?对不起,我已经编辑好了。但是我的问题仍然是一样的。最后一行的
params
来自哪里?是不是应该是
solrQuery
?对不起,我已经编辑好了。但我的问题还是一样。嗨,卡希尔特,谢谢你的回复。现在我已经设置了默认的集合值,但是仍然得到了这个错误:org.apache.zookeeper.KeeperException$NoNodeException:KeeperErrorCode=NoNode for/live_节点我可能设置了错误的默认集合值,所以请告诉我如何知道它,或者通过查看错误代码,还有什么其他错误吗,我的第一个想法是想知道动物园管理员是否真的在跑步;但我猜这不是问题所在。要查看Zookeeper知道的所有集合和活动节点,可以执行以下操作:
ZkClient=new SolrZkClient(主机:端口,超时);solrZK=solrZkClient.getSolrZooKeeper();System.out.println(solrZK.getChildren(“/live_nodes”,true))您可以对“/collections”执行相同的操作以获取所有集合。Cahilltr,我认为我的Zookeeper配置存在一些问题。因为我尝试了/live_节点和/collections,每次它都显示类似的错误消息,比如org.apache.zookeeper.keeperrorexception$NoNodeException:keeperrorcode=NoNode for/live_节点或org.apache.zookeeper.keepreexception$NoNodeException:keeperrorcode=NoNode for/collections。我正试图弄清楚动物园管理员solr的设置是否有任何问题。无论如何,谢谢。嗨,卡希尔特,谢谢你的回复。现在我已经设置了默认的集合值,但是仍然得到了这个错误:org.apache.zookeeper.KeeperException$NoNodeException:KeeperErrorCode=NoNode for/live_节点我可能设置了错误的默认集合值,所以请告诉我如何知道它,或者通过查看错误代码,还有什么其他错误吗,我的第一个想法是想知道动物园管理员是否真的在跑步;但我猜这不是问题所在。要查看Zookeeper知道的所有集合和活动节点,可以执行以下操作:
ZkClient=new SolrZkClient(主机:端口,超时);solrZK=solrZkClient.getSolrZooKeeper();System.out.println(solrZK.getChildren(“/live_nodes”,true))您可以对“/collections”执行相同的操作以获取所有集合。Cahilltr,我认为我的Zookeeper配置存在一些问题。因为我尝试了/live_节点和/collections,每次它都显示类似的错误消息,比如org.apache.zookeeper.keeperrorexception$NoNodeException:keeperrorcode=NoNode for/live_节点或org.apache.zookeeper.keepreexception$NoNodeException:keeperrorcode=NoNode for/collections。我正试图弄清楚动物园管理员solr的设置是否有任何问题。无论如何,谢谢。