如我所见,您在代码中更改了baseUrl。如您在评论中所说,您在同一页面上查询多个内核,并且所有内核都使用相同的
HttpSolrServer。因此,您的解决方案似乎缺乏同步性,可能同时有两个请求在运行,而一个请求却在查询另一个的“核心”。
当然,您可以同步您的方法。但我认为,就您而言,最好不要
HttpSolrServer每次都抽动,而应为查询设置附加参数,这将用作您的附加路径
baseUrl。您将需要设置
baseUrl为
HttpSolrServer在创建时一次:
HttpSolrServer solrHttpServer = new HttpSolrServer(baseUrl);
而不是为每个查询更改它,而是设置参数(代码的diff):
String queryexpression = "*:*"; String sortField = "createTime";-String baseUrl = SolrUtil.getSolrbaseURL(solrHttpServer.getbaseURL());-solrHttpServer.setbaseURL(baseUrl + "/" + coreName); SolrQuery query = new SolrQuery();+query.set(CommonParams.QT, "/" + coreName + "/select"); query.setQuery(queryexpression); query.setSortField(sortField, SolrQuery.ORDER.asc); QueryResponse rsp = solrHttpServer.query(query);
但是最好的解决方案是
HttpSolrServer为每个核心分别设置:
Map<String, HttpSolrServer> servers = new HashMap<String, HttpSolrServer>();servers.put(coreName1, new HttpSolrServer(baseUrl + "/" + coreName1));...
结果代码更改:
String queryexpression = "*:*"; String sortField = "createTime";-String baseUrl = SolrUtil.getSolrbaseURL(solrHttpServer.getbaseURL());-solrHttpServer.setbaseURL(baseUrl + "/" + coreName); SolrQuery query = new SolrQuery(); query.setQuery(queryexpression); query.setSortField(sortField, SolrQuery.ORDER.asc);-QueryResponse rsp = solrHttpServer.query(query);+QueryResponse rsp = servers.get(coreName).query(query);



