0

我在使用 solr 的组功能时遇到问题。我根本无法使用该功能。这是问题的描述。

我使用的组字段定义如下。

字段名称="clusterid" type="string" indexed="true" 存储="true" multiValued="false"

索引的“clusterid”字段具有有效值。

最初,我尝试在上述字段中使用 Solrj 客户端 API 使用“组”功能。我开始收到“HTTP 状态 500 内部服务器错误...”假设参数的语法或顺序可能是一个问题,我决定使用 firefox 浏览器测试相同的功能。

.../solr/select/?q=title%3Acomputer

使用有效的 clusterid 产生一组很好的结果。

但是,当我尝试使用 clusterid 字段对结果进行分组时,我得到一个空指针异常。这是用于分组的 url

.../solr/select/?q=title%3Acomputer&group=true&group.field=clusterid

回应是

类型状态报告

org.apache.solr.handler.clustering.ClusteringComponent.process(ClusteringComponent.java:89) 处 org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:186) 处的消息 null java.lang.NullPointerException org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 在 org.apache.solr.core.SolrCore.execute(SolrCore.java:1376) 在 org.apache.solr.servlet.SolrDispatchFilter.execute( SolrDispatchFilter.java:365) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在 org.apache.catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve 的 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) .invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org. apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$ Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Thread.java:662)catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 在 org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 在 org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 在 org.apache.coyote.http11 .Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662 )java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 在 org.apache.coyote.http11 .Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662 )

注意:我在 Windows XP 上使用 solr 版本 3.6.2。solrconfig 文件仅对默认设置的内存设置(增加值)进行了更改。

当我尝试使用多值字段作为分组字段时,响应消息非常清楚“多值”字段不能用于分组。当我使用非字符串字段进行测试时,我再次收到那些不是字符串字段等的响应。

但是,当提供了字符串类型的字段(clusterid 或任何其他字符串类型的字段)时,会抛出空指针异常。

我是否遗漏了任何明显的内容(在架构或 solrconfig 文件中)?

4

1 回答 1

0

我在使用 Solr 6.3 时遇到了同样的问题。似乎集群组件(您显然正在使用)无法从组响应中提取所需的数据。我发现的唯一解决方法是启用突出显示,然后集群似乎可以工作;但这会带来显着的性能损失。但是,如果您的结果很小,它可能是您的一个选择;对于更大的结果(> 200-300 文档),聚类似乎比突出显示花费更多的时间。我正在使用 Lingo 算法,也许使用 STC 会更好。

于 2017-05-25T19:42:02.877 回答