【问题标题】:Grouping query in Solrcloud throws exceptionSolrcloud 中的分组查询抛出异常
【发布时间】:2016-03-03 19:14:21
【问题描述】:

我的公司有一个搜索应用程序,我们正在尝试将其迁移到 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$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)

我尝试将查询简化为 :。所有组查询都因此错误而失败。他们在我尝试过的每个云集合中都失败了。 Solrcloud 中的分组是否损坏了 4.10.4? 这可能会阻止我们去 Solrcloud

我确实看到了一个与 SOLR-4164 相似的 Solr Jira。那里的cmets表示很难重现,我不能让它不发生!

查询的组部分是: group=true&group.field=s_id&group.limit=-1&group.sort=ds%20asc 我发现将 group.limit 更改为 500 可以使查询运行。出于商业原因,我们的最大值为 500

【问题讨论】:

    标签: solr solrcloud


    【解决方案1】:

    原来将 group.limit 标志设置为 -1 是问题的原因。我相信我们希望返回所有匹配的文件。但是,出于商业原因,我们将数量限制为 500。我猜 solr 中存在错误,但解决方法应该足够了。

    【讨论】:

    • 这也被认为是 Solr 中的一个错误,因为设置 group.limit=-1 在独立的 solr 中有效,但在 solrcloud 中无效
    • 此问题已修复。我迁移到 solr 7.2 并将 group.limit 设置为 -1 现在可以在 solrcloud 中使用
    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 2020-03-12
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多