这里我试图触发一个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
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
我遇到了同样的例外。结果这样的连接对我来说是可行的: CloudSolrServer solrServer = new CloudSolrServer(“c-node3:2181 / solr ”);
最后/ solr
答案 1 :(得分:1)
使用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);
然后,您可以使用回复来取回结果。