我在测试服务器上更新了Solr 8.4.0(从6.x)并重新编制了索引(这是一个复杂的Moodle系统的索引,主要是很多非常小的文档)。它最初可以运行,但是后来用完了磁盘空间,因此我删除了所有内容并尝试为较小的数据子集建立索引,但是仍然用尽了磁盘空间。
查看细分受众群信息图表,第一个细分受众群似乎很合理:
段_2a1u:#docs:603,564 #dels:1大小:5,275,671,226字节年龄:2020-11-25T22:10:05.023Z源:合并
每个文档有8,740字节-有点高,但还算不错。
段_28ow:#docs:241,082 #dels:31大小:5,251,034,504字节使用期限:2020-11-25T18:33:59.636Z源:merge
每个文档21,781字节
段_2ajc:#docs:50,159 #dels:1大小:5,222,429,424字节使用期限:2020-11-25T23:29:35.391Z源:merge
每个文档104,117字节!
更糟糕的是,观察一下末端的小片段:
段_2bff:#docs:2 #dels:0大小:23,605,447字节使用期限:2020-11-26T01:36:02.130Z源:刷新
我们的搜索文档中没有一个包含那么多文字。
在我们的生产Solr 6.6服务器上,该服务器具有类似但稍大的数据(出于隐私原因,测试服务器中的短文本替换了其中的一些占位符),5GB的大型段包含180万至500万个文档。
有谁知道这里可能出了什么问题?我们正在使用Solr Cell / Tika,我想知道它是否以某种方式开始存储整个文件,而不只是存储提取的文本?
事实证明,对一个10MB的英语PowerPoint文件进行了索引,其中大部分是图片,而整个内容中只有大约50个单词的文本被索引(关闭了元数据),将近100万个术语被索引了,其中大多数是汉字。据推测,Tika可能错误地提取了PowerPoint文件的某些二进制内容,就好像它是文本一样。
我只能通过反复尝试减少索引来找到它,直到其中只有少量文档(3个文档,但使用13MB磁盘空间),然后Luke的“ Overview”选项卡让我看到了一个字段(称为solr_filecontent在我的模式中)(其中包含索引化的Tika结果)有451,029个字词。然后,点击“显示热门词语”将显示一堆汉字。
我不确定是否有比反复试验少得多的麻烦方法来查找此问题,例如,是否可以找到与大量术语相关联的文档。(显然,它可能是一个非常大的PDF或具有合理术语的东西,但在这种情况下则不是。)这将很有用,因为即使我们系统中只有少数此类实例,它们也可以对整体索引大小的贡献很大。
至于解决问题:
1-我可以破解一些东西以阻止它索引该单独的文档(在我们的测试数据中反复使用,否则我可能不会注意到),但是大概在其他情况下也可能会出现问题。
2-我考虑过以某种方式排除这些术语,但是我们在索引中确实包含一小部分包含多种语言的内容,包括中文,因此即使可以将其配置为仅使用ASCII文本或其他方式,也不会没有帮助。
3-我的下一步是尝试不同的版本,以查看同一文件会发生什么情况,以防特定的Tika版本出现错误。但是,我已经测试了一系列Solr版本-6.6.2、8.4.0、8.6.3和8.7.0-并在所有它们上都发生了相同的行为。
所以我从所有这一切得出的结论是:
与我最初的想法(与版本升级有关)相反,它实际上并没有比旧的Solr版本更糟。
为了现在可以正常工作,我可能必须做一个破解来阻止它索引该特定的PowerPoint文件(在我们的测试数据集中经常发生)。大概真实的数据集不会有太多像这样的文件,否则它将已经用完了那里的磁盘空间...
仅需注意,事实证明仅当您以文档中所示的两种不同方式之一上载文件时,才会出现此问题。我已就此提交了issue.apache.org/jira/browse/SOLR-15039。