我的公司有一个搜索应用程序,我们正在尝试迁移到solrcloud。我们执行的一个关键查询使用字段折叠功能(分组)。 我们正在使用Solr 4.10.4 我们建立了一个双节点云,我创建了几个集合,每个集合都有两个分片,它们都使用默认的compositeId路由器。
我们将字符串字段s_id分组。我在模式中创建了一个新的唯一字段shard_spec,它是通过将s_id字段与旧的唯一字段连接而创建的。 该字段的示例:trizmabase1211477861!T1503SIGMA
相同的查询在非solr核心上运行完美。在solr cloud上,我得到:
java.lang.IllegalArgumentException: numHits must be > 0; please use TotalHitCountCollector if you just need the total hit count
at org.apache.lucene.search.TopFieldCollector.create(TopFieldCollector.java:1130)
at org.apache.lucene.search.TopFieldCollector.create(TopFieldCollector.java:1079)
at org.apache.lucene.search.grouping.AbstractSecondPassGroupingCollector.<init>(AbstractSecondPassGroupingCollector.java:75)
at org.apache.lucene.search.grouping.term.TermSecondPassGroupingCollector.<init>(TermSecondPassGroupingCollector.java:49)
at org.apache.solr.search.grouping.distributed.command.TopGroupsFieldCommand.create(TopGroupsFieldCommand.java:129)
at org.apache.solr.search.grouping.CommandHandler.execute(CommandHandler.java:142)
at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:412)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:218)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1976)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:368)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)
我尝试将查询简化为:。所有组查询都失败并显示此错误。他们在我试过的每一个云集合中都失败了。 Solrcloud中的分组是否已破坏4.10.4? 这可能会阻止我们前往Solrcloud
我确实看到Solr Jira看起来与SOLR-4164类似。那里的评论表明很难再现,我不能让它不会发生!
查询的组部分是: 基团=真安培; group.field = S_ID&安培; group.limit = -1&安培; group.sort = DS%20asc 我发现将group.limit更改为500可以使查询运行。出于商业原因,500是我们的最大值
答案 0 :(得分:1)
原来,将group.limit标志设置为-1是导致问题的原因。我相信我们希望返回所有匹配的文档。但是,出于商业原因,我们将数量限制为500.我猜solr中存在错误,但解决方法应该足够了。