Elastic:导入 Word 及 PDF 文件到 Elasticsearch 中
在很多实际的应用中,我们希望导入 Word 及 PDF 文件到 Elasticsearch 中。在我之前的文章 “Elasticsearch:如何对 PDF 文件进行搜索”, 我讲述了如何使用 ingest pipeline 来把 PDF 文件导入到 Elasticsearch 中。在今天的文章中,我将介绍另外一种方法来导入 PDF 及 Word 文件到 Elasticsearch 中。我们将采用
在很多实际的应用中,我们希望导入 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:
更多推荐
所有评论(0)