我在测试服务器上更新到了Solr 8.4.0(从6.x开始(,并重新编制了索引(这是一个复杂的Moodle系统的索引,主要是许多非常小的文档(。它最初工作,但后来磁盘空间用完了,所以我删除了所有内容,并尝试索引较小的数据子集,但它仍然没有磁盘空间。
从细分市场信息图来看,第一个细分市场似乎是合理的:
段_2a1u:#文件:603564#dels:1大小:5275671226字节年龄:2020-11-25T22:10:05.023Z来源:合并
这是每个文档8740个字节——有点高,但还不错。
段_28ow:#文件:241082#dels:31大小:5251034504字节年龄:2020-11-25T18:33:59.636Z来源:合并
每个文档21781字节
分段_2ajc:#文件:50159#dels:1大小:5222429424字节年龄:2020-11-25T23.29:35.391Z来源:合并
每个文档104117字节!
更糟糕的是,看看接近尾声的小片段:
段_2bff:#文档:2#dels:0大小:23605447字节年龄:2020-11-26T01:36:02.130Z来源:冲洗
我们的搜索文档都不会有那么多文本。
在我们生产的Solr 6.6服务器上,它有类似但稍大的数据(出于隐私原因,其中一些数据在测试服务器中被替换为短占位符文本(,5GB的大片段包含180万至500万个文档。
有人知道这里可能出了什么问题吗?我们正在使用Solr Cell/Tika,我想知道它是否以某种方式开始存储整个文件,而不仅仅是提取的文本?
事实证明,一个10MB的英文PowerPoint文件被索引为近50万个词条,其中大部分是图片,整个文件中只有大约50个单词的文本,而元数据被关闭。据推测,Tika错误地提取了PowerPoint文件的一些二进制内容,就好像它是文本一样。
我只能通过反复尝试减少索引来找到这一点,直到其中只有少数文档(3个文档,但使用13MB磁盘空间(,然后Luke的"概述"选项卡让我看到包含索引Tika结果的一个字段(在我的架构中称为solr_filecontent(有451029个术语。然后,单击"显示热门术语"会显示一堆汉字。
我不确定是否有比试错更不费力的方法来找到这个问题,例如,是否有任何方法可以找到与大量术语相关的文档。(很明显,它可能是一个非常大的PDF或合法地有那么多术语的东西,但在这种情况下,它不是。(这将是有用的,因为即使我们的系统中只有少数这样的实例,它们也可能对整体索引大小有很大贡献。
关于解决问题:
1-我可以破解一些东西来阻止它索引这个单独的文档(它在我们的测试数据中重复使用,否则我可能不会注意到(,但据推测,这个问题也可能发生在其他情况下。
2-我考虑过以某种方式排除术语,但我们的索引中确实有一小部分不同语言的内容,包括中文,所以即使有办法将其配置为只使用ASCII文本或其他内容,这也无济于事。
3-我的下一步是尝试不同的版本,看看同一个文件会发生什么,以防在特定的Tika版本中出现错误。然而,我已经用一系列Solr版本进行了测试——6.6.2、8.4.0、8.6.3和8.7.0——所有版本都出现了相同的行为。
所以我的结论是:
-
与我最初认为这与版本升级有关的假设相反,现在的情况实际上并不比旧的Solr版本更糟。
-
为了现在就开始工作,我可能不得不做一个黑客攻击来阻止它索引特定的PowerPoint文件(这在我们的测试数据集中经常发生(。据推测,真实的数据集不会有太多这样的文件,否则它可能已经耗尽了磁盘空间。。。