0

我正在尝试在 Jackrabbit 2.0 实例(实际上是 Day CRX 2.1 实例)上重建 Lucene 搜索索引,以便我可以为相关性评分应用新的属性提升权重。然而,它在同一点重复中止索引,计数 3173000

*INFO * MultiIndex:索引... /content/xxxxxx/jcr:content (3173000)(MultiIndex.java,第 1209 行)
*INFO * RepositoryImpl:关闭存储库...(RepositoryImpl.java,第 1139 行)

(公司名称已编辑)让 CRX Web 实例显示

java.lang.IllegalStateException:存储库不可用。

日志中没有说明它关闭的原因。在任何更高级别的跟踪上,这两者之间没有更多的线。提到的路径存在并且不起眼。Jackrabbit 每 100 个节点记录一次路径,因此它可能是导致故障的下 100 个节点中的任何一个。

知道可能出了什么问题,或者我该如何调试?

(不幸的是,这是我无法深入了解的问题之一——我不能告诉你更多,因为我不知道去哪里找。)

4

1 回答 1

0

感谢大家在评论中提出的建议。问题是我们有一些 HTML 错误的内容:特别是 a <li>,封闭与否,在 a 内<select><option>

<html><body><form>
  <select>
    <option value="1"><li></option>
  </select>
</form></body></html>

这会用 StackOverflowError 杀死javax.swing.text.html.parser.Parser,这是一个 Throwable,因此不会被 Jackrabbit MultiIndex 中的错误处理捕获。

我已经向 Oracle 报告了 Parser 崩溃,我将向 Jackrabbit 核心提出一个补丁,该补丁在索引代码周围添加额外的 try/catch,以至少记录有问题的确切节点,并在可能的情况下从错误中恢复并携带关于索引。在 StackOverflowError 的情况下,我认为这是可以恢复的:当我们回到异常处理代码时,堆栈已经展开到合理的深度。

在实践中,我不会被允许在生产环境中运行修改后的 Jackrabbit,但至少我已经识别并修复了不良内容,因此同样的问题不会在那里困扰我们。

于 2012-05-29T08:56:27.137 回答