ES解析word内容为空的问题和直接使用Tika解析文档的方案

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

在这篇文章中,作者解决了Elasticsearch(ES)无法解析docx和doc文档的问题。他尝试了多种方法,包括检查base64码、修正pipline、检查word文档和Excel解析等,但都没有成功。最终,作者决定直接使用Tika库来解析文档,并成功解析了pdf、docx、excel、ppt、markdown和txt等多种格式的文件内容。作者建议在设计文档解析时使用Tika库,而不是依赖ES的插件。

🔎

延伸解读

ES附件解析的局限性

文章指出,ES7.3的attachment插件在解析docx和doc文档时存在明显问题:content字段有值但无法解析出可读内容,附件内容为空。即使检查base64码、修正pipeline,问题依旧。此外,Excel文件也无法解析,部分docx被识别为zip或xml,说明ES对文档格式的识别不一致,这给依赖ES插件进行文档检索的场景带来了不确定性。

转向Tika的考量与代价

面对ES插件的问题,作者建议直接使用Tika库解析文档,再将文本内容写入ES。这样做虽然失去了分布式解析的能力,但换来了更高的可靠性和可控性。对于PDF等业务体量较小的场景,分布式架构并非必需,因此这种方案在简单性和可维护性上更具优势。

Tika版本选择与使用要点

作者尝试了Tika 1.7、1.27、1.28等版本,均找不到OfficeParser类,最终使用2.9.0版本成功。代码示例展示了使用AutoDetectParser和BodyContentHandler解析文件内容,并将结果作为普通文本字段存入ES,无需额外插件。这提示读者,使用Tika时需注意版本兼容性,并采用正确的解析器组合。

❓

Q&A

为什么ES无法解析docx和doc文档的内容?

ES7.3无法索引docx和doc文档,导致内容为空,原因在于ES未能正确解析附件内容。

作者尝试了哪些方法来解决ES解析问题?

作者尝试了检查base64码、修正pipeline、以及新建测试文件等多种方法,但都未成功。

Tika库在文档解析中有什么优势?

Tika库提供了更可靠和可控的文档解析方案,能够解析多种格式的文件内容。

使用Tika库解析文档时需要注意什么?

在使用Tika库时,需要确保文件路径不包含中文字符或空格,以避免解析错误。

ES解析文档的插件有什么局限性?

ES的插件依赖于pipeline,缺乏灵活性和可控性,且在解析某些文件时可能出现问题。

最终作者选择使用Tika库的原因是什么?

作者选择使用Tika库是因为它更可靠可控,且能够解析多种格式的文件,适合小型业务场景。

➡️

继续阅读