solr基于mutilcore分组查询报空指针异常

jefyjiang 2010-05-06 05:58:18
使用solr建完索引后,使用分组查询(facet),代码如下

public Map<String, Integer> queryByGroup(String qStr, String groupField,
String sortField, boolean asc, Integer pageSize, Integer pageNum) {
Map<String, Integer> rmap = new LinkedHashMap<String, Integer>();
try {
SolrServer server = searchServerFactory.getSearchServer("");// getSolrServer()
// 方法就是返回一个CommonsHttpSolrServer
SolrQuery query = new SolrQuery();
if (qStr != null && qStr.length() > 0)
query.setQuery(qStr);
else
query.setQuery("*:*");// 如果没有查询语句,必须这么写,否则会报异常
query.setIncludeScore(false);// 是否按每组数量高低排序
query.setFacet(true);// 是否分组查询
query.setRows(0);// 设置返回结果条数,如果你时分组查询,你就设置为0
query.addFacetField(groupField);// 增加分组字段
query.setFacetSort(true);// 分组是否排序
query.setFacetLimit(pageSize);// 限制每次返回结果数
query.setSortField(sortField, asc ? SolrQuery.ORDER.asc
: SolrQuery.ORDER.desc);// 分组排序字段
query.set(FacetParams.FACET_OFFSET, (pageNum - 1) * pageSize);// 当前结果起始位置
QueryResponse rsp = server.query(query);
List<Count> countList = rsp.getFacetField(groupField).getValues();
List<Count> returnList = new ArrayList<Count>();
if (pageNum * pageSize < countList.size())
returnList = countList.subList((pageNum - 1) * pageSize,
pageNum * pageSize);
else
returnList = countList.subList((pageNum - 1) * pageSize,
countList.size() - 1);
for (Count count : returnList) {
if (count.getCount() > 0)
rmap.put(count.getName(), (int) count.getCount());
}
} catch (Exception e) {
e.printStackTrace();
}
return rmap;
}

当SolrServer指向集群的core时就会报空指针异常,但指到单独某个core时,一切正常,异常如下:
严重: java.lang.NullPointerException
at org.apache.solr.handler.component.FacetComponent.countFacets(FacetComponent.java:308)
at org.apache.solr.handler.component.FacetComponent.handleResponses(FacetComponent.java:230)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:290)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)
at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:139)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
at com.sendian.test.SolrSearchTest.queryByGroup(SolrSearchTest.java:40)
at com.sendian.test.SolrSearchTest.main(SolrSearchTest.java:109)
2010-5-6 17:53:34 org.apache.solr.core.SolrCore execute
信息: [core0] webapp=null path=/select params={q=*%3A*&facet=true&rows=0&facet.field=inventor&facet.sort=count&facet.limit=10&sort=inventor+asc&facet.offset=0} status=500 QTime=188
org.apache.solr.client.solrj.SolrServerException: org.apache.solr.client.solrj.SolrServerException: java.lang.NullPointerException
at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:153)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
at com.sendian.test.SolrSearchTest.queryByGroup(SolrSearchTest.java:40)
at com.sendian.test.SolrSearchTest.main(SolrSearchTest.java:109)
Caused by: org.apache.solr.client.solrj.SolrServerException: java.lang.NullPointerException
at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:141)
... 4 more
Caused by: java.lang.NullPointerException
at org.apache.solr.handler.component.FacetComponent.countFacets(FacetComponent.java:308)
at org.apache.solr.handler.component.FacetComponent.handleResponses(FacetComponent.java:230)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:290)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)
at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:139)
... 4 more
...全文
267 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mars_Ma_OK 2010-05-06
  • 打赏
  • 举报
回复
java.lang.NullPointerException
空指针异常哦...你最好检查然后调试一下,那段代码是空哦.你肯定是用null.someAPI();...

检查:at org.apache.solr.handler.component.FacetComponent.countFacets(FacetComponent.java:308)
内容概要:本文围绕基于交替方向乘子法(ADMM)的多主体综合能源系统分布式协同优化展开研究,提出了一种兼顾系统整体性能与各主体隐私保护的分布式优化框架,并提供了完整的Matlab代码实现。研究详细构建了包含电、热、气等多种能源形式耦合的多主体综合能源系统模型,设计了基于ADMM算法的分布式求解机制,实现了在去中心化架构下的协同优化调度。文中深入分析了算法的迭代流程、收敛条件及关键参数(如惩罚因子)对优化性能的影响,通过仿真实验验证了该方法在提升能源利用效率、促进多能协同、降低运行成本方面的有效性,适用于园区微网、能源互联网等复杂场景下的分布式决策需求。; 适合人群:具备一定优化理论基础和Matlab编程能力的研究生、科研人员及从事综合能源系统、智能电网、分布式能源管理等相关领域的工程技术人员。; 使用场景及目标:①实现多主体综合能源系统中电、热、气等多能流的协同调度与优化运行;②解决传统集中式优化带来的数据隐私泄露和计算负担过重问题,支持去中心化的分布式决策模式;③为能源互联网、智慧园区、微电网等实际应用场景提供可复现、易拓展的算法原型与技术参考。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,重点理解ADMM算法中增广拉格朗日函数的构造、变量更新规则及收敛判据的实现过程,关注惩罚参数设置对算法收敛速度与稳定性的影响,可进一步尝试将其拓展应用于其他分布式优化问题或与其他智能算法进行性能对比研究。

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧