Solrcloud 中的分组查询抛出异常
Grouping query in Solrcloud throws exception
我的公司有一个我们正在尝试迁移到 solrcloud 的搜索应用程序。我们执行的关键查询之一使用字段折叠功能(分组)。
我们正在使用 Solr 4.10.4
我们设置了一个双节点云,我在其中创建了几个集合,每个集合都有两个分片,它们都使用默认的 compositeId 路由器。
我们在字符串字段上分组 s_id。我在架构中创建了一个新的唯一字段 shard_spec,它是通过将 s_id 字段与旧的唯一字段连接而成的。
字段示例:trizmabase1211477861!T1503SIGMA
相同的查询 运行 在非 solr 核心上完美。在 solr 云上我得到:
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.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)
我试图将查询简化为 :。所有组查询均因此错误而失败。它们在我尝试过的每个云集合中都失败了。 4.10.4 是否因在 Solrcloud 中分组而损坏?
这可能会阻止我们去 Solrcloud
我确实看到了一个看起来与这个 SOLR-4164 相似的 Solr Jira。那里的评论表明很难重现,我不能让它不发生!
查询的组部分是:
group=true&group.field=s_id&group.limit=-1&group.sort=ds%20asc
我发现将 group.limit 更改为 500 可以使查询变为 运行。出于商业原因,500 是我们的上限
事实证明,将 group.limit 标志设置为 -1 是问题的原因。我相信我们希望返回所有匹配的文件。但是,出于业务原因,我们将数量限制为 500。我猜想 solr 中存在错误,但解决方法应该足够了。
我的公司有一个我们正在尝试迁移到 solrcloud 的搜索应用程序。我们执行的关键查询之一使用字段折叠功能(分组)。 我们正在使用 Solr 4.10.4 我们设置了一个双节点云,我在其中创建了几个集合,每个集合都有两个分片,它们都使用默认的 compositeId 路由器。
我们在字符串字段上分组 s_id。我在架构中创建了一个新的唯一字段 shard_spec,它是通过将 s_id 字段与旧的唯一字段连接而成的。 字段示例:trizmabase1211477861!T1503SIGMA
相同的查询 运行 在非 solr 核心上完美。在 solr 云上我得到:
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.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)
我试图将查询简化为 :。所有组查询均因此错误而失败。它们在我尝试过的每个云集合中都失败了。 4.10.4 是否因在 Solrcloud 中分组而损坏? 这可能会阻止我们去 Solrcloud
我确实看到了一个看起来与这个 SOLR-4164 相似的 Solr Jira。那里的评论表明很难重现,我不能让它不发生!
查询的组部分是: group=true&group.field=s_id&group.limit=-1&group.sort=ds%20asc 我发现将 group.limit 更改为 500 可以使查询变为 运行。出于商业原因,500 是我们的上限
事实证明,将 group.limit 标志设置为 -1 是问题的原因。我相信我们希望返回所有匹配的文件。但是,出于业务原因,我们将数量限制为 500。我猜想 solr 中存在错误,但解决方法应该足够了。