【问题标题】:StackOverflowException in solrnetsolrnet 中的 StackOverflowException
【发布时间】:2013-08-08 15:06:45
【问题描述】:

我们也有类似http://bugsquash.blogspot.in/2010/12/customizing-solrnet.html这样传递大数据的需求,我们尝试了以下方法。

1) 将 requestHeaderSize 增加到 Int32.MaxValue - stackoverflow 异常
2) 使用 PostSolrconnection - 得到 StackOverflow 异常。
3) 下载 solrnet 源码并添加为项目参考 - Stackoverflow 异常
然后即使我们更改为 GET,我们也会收到 StackOverflow 异常。当我们有超过 500 个参考 ID 时,错误就会出现。如果我们的值更少,它会起作用。

我们就是这样称呼的,

searchResults = solrPost.Query(new SolrMultipleCriteriaQuery(new[] 
                { 
                    query 
                 }), 
                      new SolrNet.Commands.Parameters.QueryOptions 
                      { 
                          Fields = new[] { "*", "score" }, 
                          Start = pageSize, 
                          Rows = 40, 
                          OrderBy = listSort 
                      }); 

有什么想法吗?

编辑:

我们尝试使用 HttpRequest 请求 solr 并确定为 maxBooleanClause 问题,然后 POST 通过 HttpRequest 开始工作。但是使用 SolrNet 会发生错误,并且发生在序列化查询对象时。 queryserializer.serialize(查询)

【问题讨论】:

  • 请显示异常的调用堆栈。
  • 如果有代码,也可以在 GitHub 上分叉。
  • 我没有得到任何堆栈跟踪,它只显示 System.StackOverflowException 和“没有可用的源”。在执行上述行时也会立即出现此异常,我在 java 控制台中没有看到任何 solr 查询。
  • 然后使用调试版本和/或从源代码编译它。调用堆栈将有很大帮助(例如,调试 StackOverflow 比调试无效的内存访问要容易得多)。
  • 你必须更加努力。

标签: solrnet stack-overflow


【解决方案1】:

想知道为什么第 2 步不起作用,这是针对长 Get 请求问题的确切解决方法,即切换到 Post 请求。

您正在初始化 SolrNet 以使用 PostSolrConnection 而不是默认的 SolrConnection 的代码段可能存在问题。需要查看获取 solrPost 对象实例的代码。再看一遍并在此处发布。

【讨论】:

  • 我已经确定了 POST 的问题,问题是我们已经超过了 Solr 的 maxBooleanClause。在我们增加 solrconfig.xml 的大小后,我们得到了结果。
  • 当然是第一件事,Solr 端需要配置为接受这些长 Get 请求以及大量布尔子句(AND、OR 等)。
  • 与获取查询长度相关的另一个可能是应用程序。容器(Jetty、Tomcat 等)的 headerBufferSize 限制。这是解决方案:serverfault.com/questions/136249/… 我们在某个时候遇到了这个问题,并修补了 SolrConnection 的 Get 方法(不再需要)作为修复。以下是详细信息:teach-algo.blogspot.in/2013/06/…
【解决方案2】:

不幸的是,SolrNet 在序列化查询参数时由于 stackoverflow 错误而无法工作。替代解决方法已发布http://smartcoder.in/solrnetstackoverflow/

【讨论】:

  • 如果您要链接到另一个站点,能否请您在这里总结一下解决方案?
  • @Sharlike 我在网站上发布了解决方案。解决方法是使用HttpWebRequest获取solr结果,使用SolrNet获取查询参数,解析xml结果为IsolrResult。
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多