在我之前的文章 “Elastic:导入 Word 及 PDF 文件到 Elasticsearch 中”,我详细描述了如何安装 FSCrawler 来摄入 Word 及 PDF 文件。在那篇文章中,我们使用了解压缩包的方法。在这篇文章中,我们来描述如何使用 Docker 的方法来进行安装并摄入需要的文件。 FSCrawler. 可以在地址 GitHub - dadoonet/fscrawler: Elasticsearch File System Crawler (FS Crawler) 找到。

准备文件

我们首先按照之前的文章  “Elastic:导入 Word 及 PDF 文件到 Elasticsearch 中” 中描述的那样创建几个简单的 Word 及 PDF 文件,并把它们置于我们的目录中:

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

你也可以在地址 https://github.com/dadoonet/fscrawler/tree/master/test-documents/src/main/resources/documents 下载一些测试文档。它基本涵盖了所需要的测试文档的类型。从列表出来的文档后缀可以看出来,它目前支持如下的文件格式:

  • pdf
  • xml
  • txt
  • docx
  • png: 含有 ocr 的图片
  • html
  • json
  • mp3
  • odt
  • rtf
  • wav
  • xhtml

安装

如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话,那么请参考如下的文章来安装好自己的 Elasticsearch 及 Kibana。

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch
  • Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana

等安装好后,我们的 Elasticsearch 可以在地址 https://localhost:9200 来进行访问,也可以在你机器的私有地址下进行运行 https://privateIP:9200。你可以通过如下的命令来查看你机器的 IP 地址:

$ ifconfig | grep 192inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255

使用 Docker 来安装 FSCrawler

我们使用如下的命令来拉取 Docker 镜像:

docker pull dadoonet/fscrawler
$ docker pull dadoonet/fscrawler
Using default tag: latest
latest: Pulling from dadoonet/fscrawler
1fe172e4850f: Pull complete
44d3aa8d0766: Pull complete
6ce99fdf16e8: Pull complete
9c8cd828df6c: Pull complete
4760215418fb: Pull complete
8ac9abc1945a: Pull complete
Digest: sha256:2950edb12619187de9823303ed0cf1a4dc2219f8faa80e3a7bdfbe46cb690a69
Status: Downloaded newer image for dadoonet/fscrawler:latest
docker.io/dadoonet/fscrawler:latest

注意:该镜像非常大(1.2+gb),因为它包含 Tesseract 和所有经过训练的语言数据。 如果你根本不想使用 OCR,则可以通过拉取使用较小的镜像(大约 530mb)dadoonet/fscrawler:noocr

docker pull dadoonet/fscrawler:noocr

假设你的文档位于 ~/tmp 目录中,并且你希望将 fscrawler 作业存储在 ~/.fscrawler 中。 你可以使用以下命令运行 FSCrawler:

docker run -it --rm -v ~/.fscrawler:/root/.fscrawler -v ~/tmp:/tmp/es:ro dadoonet/fscrawler fscrawler job_name

针对我的情况,我的文档位于 ~/tmp/docs 目录中,我们使用如下的命令:

docker run -it --rm -v ~/.fscrawler:/root/.fscrawler -v ~/tmp/docs:/tmp/es:ro dadoonet/fscrawler fscrawler job_name
$ docker run -it --rm -v ~/.fscrawler:/root/.fscrawler -v ~/tmp/docs:/tmp/es:ro dadoonet/fscrawler fscrawler job_name
07:24:32,475 INFO  [f.console] ,----------------------------------------------------------------------------------------------------.
|       ,---,.  .--.--.     ,----..                                     ,--,           2.10-SNAPSHOT |
|     ,'  .' | /  /    '.  /   /   \                                  ,--.'|                         |
|   ,---.'   ||  :  /`. / |   :     :  __  ,-.                   .---.|  | :               __  ,-.   |
|   |   |   .';  |  |--`  .   |  ;. /,' ,'/ /|                  /. ./|:  : '             ,' ,'/ /|   |
|   :   :  :  |  :  ;_    .   ; /--` '  | |' | ,--.--.       .-'-. ' ||  ' |      ,---.  '  | |' |   |
|   :   |  |-, \  \    `. ;   | ;    |  |   ,'/       \     /___/ \: |'  | |     /     \ |  |   ,'   |
|   |   :  ;/|  `----.   \|   : |    '  :  / .--.  .-. | .-'.. '   ' .|  | :    /    /  |'  :  /     |
|   |   |   .'  __ \  \  |.   | '___ |  | '   \__\/: . ./___/ \:     ''  : |__ .    ' / ||  | '      |
|   '   :  '   /  /`--'  /'   ; : .'|;  : |   ," .--.; |.   \  ' .\   |  | '.'|'   ;   /|;  : |      |
|   |   |  |  '--'.     / '   | '/  :|  , ;  /  /  ,.  | \   \   ' \ |;  :    ;'   |  / ||  , ;      |
|   |   :  \    `--'---'  |   :    /  ---'  ;  :   .'   \ \   \  |--" |  ,   / |   :    | ---'       |
|   |   | ,'               \   \ .'         |  ,     .-./  \   \ |     ---`-'   \   \  /             |
|   `----'                  `---`            `--`---'       '---"                `----'              |
+----------------------------------------------------------------------------------------------------+
|                                        You know, for Files!                                        |
|                                     Made from France with Love                                     |
|                           Source: https://github.com/dadoonet/fscrawler/                           |
|                          Documentation: https://fscrawler.readthedocs.io/                          |
`----------------------------------------------------------------------------------------------------'07:24:32,487 INFO  [f.p.e.c.f.c.BootstrapChecks] Memory [Free/Total=Percent]: HEAP [160.6mb/2.8gb=5.48%], RAM [8.2gb/11.4gb=72.44%], Swap [1023.9mb/1023.9mb=100.0%].
07:24:32,528 INFO  [f.console] job [job_name] does not exist
07:24:32,528 INFO  [f.console] Do you want to create it (Y/N)?
y
07:24:35,483 INFO  [f.console] Settings have been created in [/root/.fscrawler/job_name/_settings.yaml]. Please review and edit before relaunch

在第一次运行时,如果 ~/.fscrawler 中尚不存在该作业,FSCrawler 将询问你是否要创建它:

注意:配置文件实际上存储在你机器上的 ~/.fscrawler/job_name/_settings.yaml 中。 请记住更改你的 elasticsearch 实例的 URL,因为容器将无法看到它在默认 127.0.0.1 下运行。 你将需要使用主机的实际 IP 地址。

我们接下来编辑文件 _settings.yaml 文件:

$ pwd
/Users/liuxg/.fscrawler/job_name
$ vi _settings.yaml 

如上所示,我们需要做上面的配置。为了方便,我们特意设置 ssl_verification 为 false。你需要根据自己的 Elasticsearch 端点及用户账号信息进行修改。修改完后保存,我们再次运行 Docker:

我们进入到 Kibana 的页面,并进行查看:

GET _cat/indices

我们可以看到有两个新的索引已经生产:open job_name_folder 及  job_name。

使用 Docker compose

我们在一个目录里创建如下的文件结构:

针对 Elasticsearch,我们按照如下的配置来创建一个叫做 _settings.yaml 的文件:

---
name: "idx"
fs:indexed_chars: 100%lang_detect: truecontinue_on_error: trueocr:language: "eng"enabled: truepdf_strategy: "ocr_and_text"
elasticsearch:nodes:- url: "https://elasticsearch:9200"username: "elastic"password: "changeme"ssl_verification: false
rest :url: "http://fscrawler:8080"

注意:上面显示的配置也意味着启动 REST 接口。 它还使用英语激活文档的完整索引、语言检测和 ocr。 你可以根据需要调整此示例。

我们按照地址 https://github.com/dadoonet/fscrawler/blob/master/contrib/docker-compose-example-elasticsearch/docker-compose.yml 来创建 docker-compose.yaml 文件:

docker-compose.yml

---
version: "2.2"services:setup:image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}volumes:- certs:/usr/share/elasticsearch/config/certsuser: "0"command: >bash -c 'if [ x${ELASTIC_PASSWORD} == x ]; thenecho "Set the ELASTIC_PASSWORD environment variable in the .env file";exit 1;elif [ x${KIBANA_PASSWORD} == x ]; thenecho "Set the KIBANA_PASSWORD environment variable in the .env file";exit 1;fi;if [ ! -f certs/ca.zip ]; thenecho "Creating CA";bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;unzip config/certs/ca.zip -d config/certs;fi;if [ ! -f certs/certs.zip ]; thenecho "Creating certs";echo -ne \"instances:\n"\"  - name: elasticsearch\n"\"    dns:\n"\"      - elasticsearch\n"\"      - localhost\n"\"    ip:\n"\"      - 127.0.0.1\n"\> config/certs/instances.yml;bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;unzip config/certs/certs.zip -d config/certs;fi;echo "Setting file permissions"chown -R root:root config/certs;find . -type d -exec chmod 750 \{\} \;;find . -type f -exec chmod 640 \{\} \;;echo "Waiting for Elasticsearch availability";until curl -s --cacert config/certs/ca/ca.crt https://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;echo "Setting kibana_system password";until curl -s -X POST --cacert config/certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} -H "Content-Type: application/json" https://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;echo "All done!";'healthcheck:test: ["CMD-SHELL", "[ -f config/certs/elasticsearch/elasticsearch.crt ]"]interval: 1stimeout: 5sretries: 120elasticsearch:depends_on:setup:condition: service_healthyimage: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}volumes:- certs:/usr/share/elasticsearch/config/certs- esdata:/usr/share/elasticsearch/dataports:- ${ES_PORT}:9200environment:- node.name=elasticsearch- cluster.name=${CLUSTER_NAME}- cluster.initial_master_nodes=elasticsearch- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}- bootstrap.memory_lock=true- xpack.security.enabled=true- xpack.security.http.ssl.enabled=true- xpack.security.http.ssl.key=certs/elasticsearch/elasticsearch.key- xpack.security.http.ssl.certificate=certs/elasticsearch/elasticsearch.crt- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.http.ssl.verification_mode=certificate- xpack.security.transport.ssl.enabled=true- xpack.security.transport.ssl.key=certs/elasticsearch/elasticsearch.key- xpack.security.transport.ssl.certificate=certs/elasticsearch/elasticsearch.crt- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt- xpack.security.transport.ssl.verification_mode=certificate- xpack.license.self_generated.type=${LICENSE}mem_limit: ${MEM_LIMIT}ulimits:memlock:soft: -1hard: -1healthcheck:test:["CMD-SHELL","curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",]interval: 10stimeout: 10sretries: 120kibana:depends_on:elasticsearch:condition: service_healthyimage: docker.elastic.co/kibana/kibana:${STACK_VERSION}volumes:- certs:/usr/share/kibana/config/certs- kibanadata:/usr/share/kibana/dataports:- ${KIBANA_PORT}:5601environment:- SERVERNAME=kibana- ELASTICSEARCH_HOSTS=https://elasticsearch:9200- ELASTICSEARCH_USERNAME=kibana_system- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}- ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt- ENTERPRISESEARCH_HOST=http://enterprisesearch:${ENTERPRISE_SEARCH_PORT}mem_limit: ${MEM_LIMIT}healthcheck:test:["CMD-SHELL","curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",]interval: 10stimeout: 10sretries: 120# FSCrawlerfscrawler:image: dadoonet/fscrawler:$FSCRAWLER_VERSIONcontainer_name: fscrawlerrestart: alwaysvolumes:- ~/tmp/docs/:/tmp/es:ro- ${PWD}/config:/root/.fscrawler- ${PWD}/logs:/usr/share/fscrawler/logsdepends_on:elasticsearch:condition: service_healthyports:- ${FSCRAWLER_PORT}:8080command: fscrawler job_name --restart --restvolumes:certs:driver: localesdata:driver: localkibanadata:driver: local

注意:上面显示的配置也用于启动 Kibana。 如果不需要,可以跳过该部分。

在上面,我把测试文档置于路径 ~/tmp/docs/ 中。你可以根据自己的文档路径进行修改。同时,我们把 job_name 定义为我们的任务名称。如果你修改为其它的名称,那么你需要在上面的文档中进行替换,并同时修改相应的目录名称。

细心的开发者可能会发现,这里的 docker-compose.yml 文件和我之前的文章 “Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x” 里的是非常相似的。在这里就不一一进行详述了。

同时为了能够配置上面的 docker-compose.yml 中的环境变量,我们还需要在 docker-compose.yml 所在的目录里创建一个如下的文件:

.env

# FSCrawler Settings
FSCRAWLER_VERSION=2.10-SNAPSHOT
FSCRAWLER_PORT=8080# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=changeme# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=changeme# Version of Elastic products
STACK_VERSION=8.3.3# Set the cluster name
CLUSTER_NAME=docker-cluster# Set to 'basic' or 'trial' to automatically start the 30-day trial
#LICENSE=basic
LICENSE=trial# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200# Port to expose Kibana to the host
KIBANA_PORT=5601# Enterprise Search settings
ENTERPRISE_SEARCH_PORT=3002
ENCRYPTION_KEYS=q3t6w9z$C&F)J@McQfTjWnZr4u7x!A%D# Increase or decrease based on the available host memory (in bytes)
MEM_LIMIT=1073741824# Project namespace (defaults to the current folder name if not set)
COMPOSE_PROJECT_NAME=fscrawler

请注意,我们配置的超级用户 elastic 的密码为 changeme。经过上面的配置后,我们的文件结构如下:

$ pwd
/Users/liuxg/fscrawler
$ tree -aL 3
.
├── .env
├── config
│   └── job_name
│       └── _settings.yaml
├── data
├── docker-compose.yml
└── logs

然后,你可以运行整个堆栈,包括 FSCrawler:

docker-compose up -d

如果你不想它在后台运行的话,你可以使用如下的方式来运行:

docker-compose up

我们来登录 Kibana:

使用如下的命令来查看最新的索引:

GET _cat/indices

从上面的输出结果来看,它已经成功地对我们的文档进行了上传。

参考:

【1】 Download FSCrawler — FSCrawler 2.10-SNAPSHOT documentation

Elasticsearch:使用 Docker 来安装 FSCrawler 并摄入 Word 及 PDF 文件相关推荐

  1. Elasticsearch在docker下安装运行,ES查询、分词器

    目录 Elasticsearch的一点背景 数据输入 数据输出 集群 集群灾备 集群管理 Docker容器中运行ElasticSearch.Kibana.cerebro ElasticSearch K ...

  2. LInux下安装libreoffice(用于Linux下Word转pdf,附代码)

    1. LibreOffice LibreOffice 是一款免费的开源办公软件,类似于 Microsoft Office 和 Google Docs.它包括多个应用程序,例如: Writer:用于处理 ...

  3. adobe reader java_请问,如何用JAVA读PDF文件在浏览器中显示,不需要在本地系统中安装Adobe Reader。求java代码...

    JAVA读PDF可以实现,重点是如何在网页中显示PDF文件,而且不需要安装AdobeReader.没有安装AdobeReader,在网页显示PDF文件时,浏览器会提示下载.请问如何在网页中显示PDF文 ...

  4. 转 安装 Microsoft Office 环境下,几种常见的Word转换PDF方法

    PDF转WORD请参见:http://www.portablesoft.org/tags/pdf%E8%BD%AC%E6%8D%A2%E5%99%A8/ 1.Microsoft Office 2010 ...

  5. 腾讯云docker下安装elasticsearch及IK分词器-扩展词-停止词Kibana

    1.拉取 docker pull elasticsearch:7.7.0 2.运行 docker run --name elasticsearch -d -e ES_JAVA_OPTS="- ...

  6. docker compose安装elasticsearch

    docker compose安装 elasticsearch 安装 创建目录 es: mkdir es cd es 创建挂载目录 data mkdir data 创建 docker-compose.y ...

  7. Docker ElK安装部署使用教程

    Docker ElK安装部署使用教程 原文:Docker ElK安装部署使用教程 一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elast ...

  8. ElasticSearch可视化工具Dejavu安装使用

    目录 1.安装 Docker 环境 2.运行 ElasticSearch 服务 3.安装运行 Dejavu 服务 Dejavu 是一个 ElasticSearch 的 Web UI 工具,支持通过 J ...

  9. Linux发行版CentOS下Docker的安装和卸载

    目录 1.Docker的安装 2.Docker的卸载 linux中安装docker的方式有几种,本文是基于docker仓库的安装 前置须知: 本文的服务器并非虚拟出来的服务器,而是在阿里云ESC上进行 ...

最新文章

  1. mysql profile 查谒_MYSQL查询优化:profile功能
  2. linux的sh文件怎么执行,linux下执行sh文件的四种做法
  3. python 测试用例的无输入_如何为无参数方法自动生成测试用例?
  4. 聊聊高并发下库存加减那些事儿——“异步扣减库存”
  5. python 示例_带有示例的Python列表copy()方法
  6. @primary注解_springboot整合redis分别实现手动缓存和注解缓存
  7. 思考…求知(判别用户输入的是否是整数)
  8. 完全重构一个项目的前端代码
  9. GlusterFS 部署和应用
  10. IE兼容性问题web.config设置
  11. 跟我一起学Linux系统编程006C-进程内存分配,堆分配brk、malloc、free
  12. IOS Label下划线 中划线
  13. 中兴软件笔试 c语言,中兴通讯软件工程师面试经验
  14. windows10 通过bat脚本安装软件
  15. PHP - 表单(FORM)实例
  16. Android学习之导航
  17. 招聘海外博士计算机视觉国际,丹麦奥尔堡大学计算机视觉博士后职位
  18. 塑料制品行业市场产业集中度分析预测及经营状况可行性研究
  19. 区块链基础理论模拟试卷五
  20. HTML5 全屏 API

热门文章

  1. IOS中相册的一般处理
  2. 施努卡:3D视觉识别系统 3D视觉检测原理
  3. 高逼格的 2 个流量监控小神器
  4. 怎么客户端不访问服务器进入系统,服务器本机能打开,局域网其他电脑怎么访问点晴OA?需要设置固定IP吗?...
  5. 编写一个程序,输出所有水仙花数,并统计共有多少个水仙花数。所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如,153=1^3+5^3+3^3
  6. [转]负序电流对发电机的危害,发电机负序保护的作用
  7. 计算机信息技术专项职业能力,供应链管理专项职业能力鉴定考试大纲
  8. 什么是泛型以及泛型的作用?
  9. rfid技术及应用答案王佳斌_《RFID技术与应用》试题库(含答案)汇总
  10. Matplotlib使用和绘制二维图表