ES检索PDF/Word等格式文件方案插件安装ES自带文档预处理插件,但7.x版本默认发版包不含ingest attachment plugin。通过摄取附件插件,Elasticsearch可利用Apache文本提取库Tika提取常见格式文件附件(如PPT、XLS和PDF)。源字段需为base64编码的二进制文件。为减少base64转换开销,可用CBOR格式而非JSON,字段指定为字节数组而非字符串。处理器将跳过base64解码。在线安装以下命令直接联网下载插件并安装离线安装官网有说明:This plugin can be downloaded for offline install from artifacts.elastic.co/do....注意:集群所有ES服务实例需安装此插件!最后,重启ElasticSearch全部服务。构建管道在Kibana中执行:上述命令返回:在attachment中指定要预处理的字段为content,因此写入Elasticsearch时需将文档内容放在content字段。建立文档结构映射为提高搜索效果,需建立文档结构映射,定义文本文件通过预处理器上传后存储形式。使用PUT指令创建docwrite索引,用于接收测试数据。首先,需确保ES已安装中文分词器ik插件,此处不再赘述。上述请求返回:attachment字段为attachment命名pipeline抽取文档附件文本后自动附加的字段。这是一个嵌套字段,包含多个子字段,包括抽取文本content和一些文档信息元数据。测试因ElasticSearch基于JSON格式文档数据库,所以附件文档插入前需进行Base64编码。先通过以下网站将PDF文件转化为Base64文本:这是一个在线PDF转base64的小网站,可能含有广告,有可能不可用:toolfk.com/tools/pdf-to...使用上述网站只能转换小文件,我转换一个10页PPT后页面无响应,无法拷贝结果。随后,我转换了一个更小PDF,可复制结果,发现字符数有41万之多。注意,ES默认限制一个字段只能索引最大10万个字符,因此需修改管道参数(改为100万),也可改为无限制但最好不要这样做:写入文档内容并索引查询测试返回:能够查到1条结果(但目前只有这一条结果)。作为对比,我们将本文档也转码为Base64格式上传。然后继续搜索"内存泄漏"只出现第一篇文档,而搜Base64只出现第二篇文档。过程中解决了ES请求体过大和Kibana无法发送大请求的问题!(对于生产环境是必须的!)方案可行后期,后端只需使用Java API实现程序化转码PDF并上传。建设思路使用git hook实时监控触发,或直接简单使用定时任务从文件源下载pdf、word、md等格式文档,使用java将文档内容转成Base64格式,仿照上述思路方法写入ES,即可实现全文搜索,搜索到的文档可返回在线下载地址,可直接打开或下载,完成闭环。