前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch:如何对 PDF 文件进行搜索

Elasticsearch:如何对 PDF 文件进行搜索

作者头像
腾讯云大数据
修改2021-01-08 16:13:49
3.7K0
修改2021-01-08 16:13:49
举报

腾讯云 Elasticsearch Service】高可用,可伸缩,云端全托管。集成X-Pack高级特性,适用日志分析/企业搜索/BI分析等场景


Elasticsearch 通常用于为字符串,数字,日期等类型的数据建立索引。但是,如果要直接为 .pdf.doc 等文件建立索引并使其可搜索该怎么办?在 HCM,ERP 和电子商务等应用程序中有这种实时用例的需求。

在今天的这篇文章中我们来讲一下如何实现对 .pdf 或 .doc 文件的搜索。本解决方案使用于 Elasticsearch 5.0 以后的版本。

实现原理

我们采用如下的方法来实现把一个 .pdf 文件导入到 Elasticsearch 的数据 node 中:

如上图所示,我们首先把我们的.pdf文件进行Base64的处理,然后上传到 Elasticsearch 中的 ingest node 中进行处理。我们可以通过 Ingest attachment plugin 来使得 Elasticsearch 提取通用格式的文件附件比如  PPT, XLS 及 PDF。最终,数据进行倒Elasticsearch 的 data node 中以便让我们进行搜索。

在下面的章节中,我们来逐步介绍如何实现。

导入 pdf 文件到 Elasticsearch 中

准备 pdf 文件

我们可以使用我们的 word 或其它编辑软件来生产一个 pdf 的文件。暂且我们叫这个文件的名字为 sample.pdf 文件。而它的内容非简单:

在我们的 sample.pdf 文件中,我们只有一句话 “I like this useful tool”。

安装 ingest attachment plugin

ingest attachment plugin 允许 Elasticsearch 通过使用 Apache 文本提取库Tika提取通用格式(例如 PPT,XLS 和 PDF)的文件附件。 Apache Tika 工具包可从一千多种不同的文件类型(例如 PPT,XLS 和 PDF)中检测并提取元数据和文本。 所有这些文件类型都可以通过一个界面进行解析,从而使 Tika 对搜索引擎索引,内容分析,翻译等有用。

源字段必须是 base64 编码的二进制。 如果不想增加在 base64 之间来回转换的开销,则可以使用 CBOR 格式而不是 JSON,并将字段指定为字节数组而不是字符串表示形式。 然后,处理器将跳过base64解码。

可以使用插件管理器安装此插件:

代码语言:javascript
复制
sudo bin/elasticsearch-plugin install ingest-attachment

该插件必须安装在集群中的每个节点上,并且每个节点必须在安装后重新启动

等我们安装好这个插件后,我们可以通过如下的命令来查看该插件是否已经被成功安装好了。

代码语言:javascript
复制
./bin/elasticsearch-plugin list

如果安装正确,我们则可以看到如下的输出:

创建 attachment pipeline

我们可以在我们的 Ingest node 上创建一个叫做 pdfattachment 的 pipleline:

代码语言:javascript
复制
PUT _ingest/pipeline/pdfattachment{  "description": "Extract attachment information encoded in Base64 with UTF-8 charset",  "processors": [    {      "attachment": {        "field": "file"      }    }  ]}

转换 pdf 文件并上传 pdf 文件的内容到 Elasticsearch中

对于 ingest attachment plugin来说,它的数据必须是 Base64 的。我们可以在网站 Base64 encoder 来进行转换。针对我们的情况,我们直接通过脚本的方法来进行操作:

indexPdf.sh

代码语言:javascript
复制
#!/bin/bashencodedPdf=`cat sample.pdf | base64`json="{\"file\":\"${encodedPdf}\"}"echo "$json" > json.filecurl -XPOST 'http://localhost:9200/pdf-test1/_doc?pipeline=pdfattachment&pretty' -H 'Content-Type: application/json' -d @json.file

在上面的脚本中,我们针对 sample.pdf 进行 base64 的转换,并生成一个叫做j son.file 的文件。在最后,我们把这个 json.file 文件的内容通过 curl 指令上传到 Elasticsearch 中。我们可以在 Elasticsearch 中查看一个叫做 pdf-test1 的索引。

我们可以在 terminal 中直接运行上面的脚本:

代码语言:javascript
复制
./indexPdf.sh

至此我们已经把pdf文件导入到 Elasticsearch 中了。

查看索引并搜索

我们可以通过如下的命令来查询我们的 pdf-test1 索引:

代码语言:javascript
复制
GET pdf-test1/_search

显示结果为:

在上面我们可以看出来,我们的索引中有一个叫做 content 的字段,它包含了我们的 pdf 文件的内容。这个字段可以同我们进行搜索。在上面我们也看到了一个很大的一个字段 file。它含有我们转换过的 base64 格式的内容。如果我们不想要这个字段,我们可以通过添加另外一个 remove processor 来除去这个字段:

代码语言:javascript
复制
PUT _ingest/pipeline/pdfattachment{  "description": "Extract attachment information encoded in Base64 with UTF-8 charset",  "processors": [    {      "attachment": {        "field": "file"      }    },    {      "remove": {        "field": "file"      }    }  ]}

这样我们除去了那个叫做 file 的字段,那么修正后的索引内容为:

参考:

【1】https://qbox.io/blog/how-to-index-attachments-and-files-to-elasticsearch-5-0-using-ingest-api?utm_source=qbox.io&utm_medium=article&utm_campaign=powerful-pdf-search-elasticsearch-mapper-attachment

【2】https://www.elastic.co/guide/en/elasticsearch/plugins/current/ingest-attachment.html


最新活动

包含文章发布时段最新活动,前往ES产品介绍页,可查找ES当前活动统一入口

Elasticsearch Service自建迁移特惠政策>>

Elasticsearch Service 新用户特惠狂欢,最低4折首购优惠 >>

Elasticsearch Service 企业首购特惠,助力企业复工复产>>

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【腾讯云 Elasticsearch Service】高可用,可伸缩,云端全托管。集成X-Pack高级特性,适用日志分析/企业搜索/BI分析等场景
  • 实现原理
  • 导入 pdf 文件到 Elasticsearch 中
    • 准备 pdf 文件
      • 安装 ingest attachment plugin
        • 创建 attachment pipeline
          • 转换 pdf 文件并上传 pdf 文件的内容到 Elasticsearch中
          • 查看索引并搜索
          • 最新活动
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档