在很多实际的应用中,我们希望导入 Word 及 PDF 文件到 Elasticsearch 中。在我之前的文章 “Elasticsearch:如何对 PDF 文件进行搜索”, 我讲述了如何使用 ingest pipeline 来把 PDF 文件导入到 Elasticsearch 中。在今天的文章中,我将介绍另外一种方法来导入 PDF 及 Word 文件到 Elasticsearch 中。我们将采用一个开源的项目  https://github.com/dadoonet/fscrawler 来实现这个。

 

安装

Elasticsearch 及 Kibana

我们参照之前的文章 “Elastic:菜鸟上手指南” 安装 Elasticsearch 及 Kibana。

用于 Elasticsearch 的文件系统爬虫程序

我们在地址 https://fscrawler.readthedocs.io/en/latest/installation.html 下载最新的 fscrawler 安装文件。针对 Elasticsearch 7.x,我们可以在地址下载最新的软件。请下载文件扩展名为 .zip 的文件。我们把下载好的文件解压缩,并保存于自己的电脑目录中。针对我的情况:

$ pwd
/Users/liuxg/elastic2/fscrawler-es7
$ ls
LICENSE   NOTICE    README.md bin       config    lib       logs

我们进入到 fscrawler 的安装目录中,并打入如下的命令:

# On Linux/Mac
bin/fscrawler resumes
# On Windows
.\bin\fscrawler resumes

如果你没有安装 Java,你需要在自己的电脑上安装 Java 环境。在上面,resumes 是我们取的一个 job 名称。我们想针对简历来进行导入。运行上面的命令后,我们可以看到:

在上面,我们选择 Y。接着我们可以看到一个位置让我们对 .settings.yaml 文件进行配置。

.settings.yaml

---
name: "resumes"
fs:
  url: "/Users/liuxg/tmp/docs"
  update_rate: "15m"
  excludes:
  - "*/~*"
  json_support: false
  filename_as_id: false
  add_filesize: true
  remove_deleted: true
  add_as_inner_object: false
  store_source: false
  index_content: true
  attributes_support: false
  raw_metadata: false
  xml_support: false
  index_folders: true
  lang_detect: false
  continue_on_error: false
  ocr:
    language: "eng"
    enabled: true
    pdf_strategy: "ocr_and_text"
  follow_symlinks: false
elasticsearch:
  nodes:
  - url: "http://127.0.0.1:9200"
  bulk_size: 100
  flush_interval: "5s"
  byte_size: "10mb"
  ssl_verification: true

在上面,我配置我的文件的 url 于位置 /Users/liuxg/tmp/docs。针对你自己的情况,你需要修改这个位置指向你的 Word 及 PDF 文件所在的目录。在 elasticsearch 部分,我们配置 Elasticsearch 的访问地址。如果你的 Elasticsearch 配置有用户名及密码,请参考链接

我们把所需要导入的文件拷贝到上面配置的文件路径 /Users/liuxg/tmp/docs:

$ pwd
/Users/liuxg/tmp/docs
$ ls
doc1.docx doc2.pdf

在上面,我创建了两个文件:doc1.docx 及 doc2.pdf。它们的内容分别是:

doc1.docx

doc2.pdf

等我们配置完毕后,我们再次重新运行 fscrawler 应用:

# On Linux/Mac
bin/fscrawler resumes
# On Windows
.\bin\fscrawler resumes

我们可以看到如下的画面:

当我们运行上面的应用后,fscrawler 开始对 /Users/liuxg/tmp/docs 里的文件进行爬虫。

 

使用 Kibana 对文件进行搜索

我们可以在 Kibana 中查看到一个叫做 resumes 的索引:

我们可以看到有两个文档被导入。我们可以使用如下的方法进行搜索:

GET resumes/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "resumes",
        "_type" : "_doc",
        "_id" : "ec24c40f35e2f77c02cb5b5933b32",
        "_score" : 1.0,
        "_source" : {
          "content" : """
Zhan san


I work in Microsoft, and I like MS office.
""",
          "meta" : {
            "author" : "Xiaoguo Liu",
            "date" : "2021-04-06T00:30:00.000+00:00",
            "modifier" : "Xiaoguo Liu",
            "created" : "2021-04-06T00:28:00.000+00:00"
          },
          "file" : {
            "extension" : "docx",
            "content_type" : "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
            "created" : "2021-04-06T08:29:19.000+00:00",
            "last_modified" : "2021-04-06T08:30:04.843+00:00",
            "last_accessed" : "2021-04-06T08:53:43.630+00:00",
            "indexing_date" : "2021-04-06T08:56:20.163+00:00",
            "filesize" : 12041,
            "filename" : "doc1.docx",
            "url" : "file:///Users/liuxg/tmp/docs/doc1.docx"
          },
          "path" : {
            "root" : "6a258625e422aef8094bce5e7a283a1",
            "virtual" : "/doc1.docx",
            "real" : "/Users/liuxg/tmp/docs/doc1.docx"
          }
        }
      },
      {
        "_index" : "resumes",
        "_type" : "_doc",
        "_id" : "78578e7b7271ede4b4caff8dc1759de6",
        "_score" : 1.0,
        "_source" : {
          "content" : """
Liu Xiaoguo 
 

I work in Elastic, and I like Elasticsearch 

Liu Xiaoguo

| work in Elastic, and | like Elasticsearch


""",
          "meta" : {
            "title" : "Microsoft Word - doc2.docx",
            "date" : "2021-04-06T00:31:15.000+00:00",
            "format" : "application/pdf; version=1.3",
            "creator_tool" : "Word",
            "created" : "2021-04-06T00:31:15.000+00:00"
          },
          "file" : {
            "extension" : "pdf",
            "content_type" : "application/pdf",
            "created" : "2021-04-06T08:31:15.000+00:00",
            "last_modified" : "2021-04-06T08:31:15.222+00:00",
            "last_accessed" : "2021-04-06T08:53:49.821+00:00",
            "indexing_date" : "2021-04-06T08:56:21.304+00:00",
            "filesize" : 16558,
            "filename" : "doc2.pdf",
            "url" : "file:///Users/liuxg/tmp/docs/doc2.pdf"
          },
          "path" : {
            "root" : "6a258625e422aef8094bce5e7a283a1",
            "virtual" : "/doc2.pdf",
            "real" : "/Users/liuxg/tmp/docs/doc2.pdf"
          }
        }
      }
    ]
  }
}

从上面的字段 content 中,我们可以看出来 PDF 及 Word 文档的内容。

我们为 resumes 创建一个索引模式:

这样就创建了一个叫做 resumes* 的索引模式。

我们接下来在 Discover 中进行查看:

从上面我们可以看到被导入的文档。

 

添加新的文档

我们接着创建一个新的文档,并把该文档拷入我们配置的文件夹中。

doc3.docx

我们需要等到15分钟过后,才可以看到新的文档被导入。这个是在我们之前的 .settings.yaml 进行配置的。

---
name: "resumes"
fs:
  url: "/Users/liuxg/tmp/docs"
  update_rate: "15m"

等15分钟过后,我们再次在 Kibana 中进行查看。

我们可以看到一个新的文档被导入。从上面,我们可以看到三个文档被导入。我们来搜索一下 google:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐