You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dsProject/dsRag/Doc/2、FSCrawler安装配置文档.md

398 lines
18 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

参考文档:
```sh
# Elasticsearch FSCrawler 文档爬虫学习,请先看这一篇!
https://blog.csdn.net/laoyang360/article/details/138143195
```
### 一、$FSCrawler$ 功能介绍
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144044965.png)
FSCrawler 提供了一种高效的方法来自动化文件的索引过程,支持多种文件格式,并具备以下核心功能:
多种文件支持能够处理包括但不限于PDF、Microsoft Office文档、OpenOffice文档等多种格式。
文本提取:从上述文件中提取文本,利用 OCR 技术处理图像和扫描的文档。
元数据提取:自动提取文件的元数据,如作者、标题、关键词等。
更新和同步:监视文件夹变化,自动更新索引以反映新增、修改或删除的文件。
安全:支持使用用户名和密码对 Elasticsearch 进行安全连接。
扩展性:可以配置为处理大规模的数据集。
### 二、$FSCrawler$ 下载步骤指南
> **注**:需要开启$VPN$
```sh
https://github.com/dadoonet/fscrawler
# 下载
wget https://s01.oss.sonatype.org/content/repositories/snapshots/fr/pilato/elasticsearch/crawler/fscrawler-distribution/2.10-SNAPSHOT/fscrawler-distribution-2.10-20250305.083042-479.zip
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623143834374.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623143841189.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623143847053.png)
这里其实有个小细节,默认最新版本的安装包在页面的最后面,需要不断地下拉到底才能找到。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144005774.png)
### 三、$FSCrawler$ 安装指南
安装很简单,只需要解压下载的文件即可。
将安装包下载或者远程拷贝到 Linux 服务器。
**3.1 步骤1解压 FSCrawler**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144317757.png)
```sh
yum install unzip -y
unzip fscrawler-distribution-2.10-20250305.083042-479.zip
cd fscrawler-distribution-2.10-SNAPSHOT/
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144504068.png)
**3.2 步骤2启动 FSCrawler**
为了方便咱们在部署路径本地修改和维护配置文件,我们要指定一个本地路径,同时需要写上一个 job 名称。
具体命令行参考如下:
```sh
mkdir test
bin/fscrawler --config_dir ./test fs_job_20240421
```
执行截图参考如下:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144555300.png)
此处有交互,要选择:"y"
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144651788.png)
**3.3 步骤3修改配置文件**
经过步骤 2 后test 路径下会创建了名为“fs_job_20240421”的 job 任务,目录结构如下图所示。
```sh
yum install tree -y
tree test
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623144755124.png)
我们先解读一下_settings.yaml 各个字段的含义,然后再说明针对 8.X 版本如何修改。
配置内容主要包括 Elasticsearch 连接信息、文件夹路径、扫描间隔等,如下表格所示。
| 字段名 | 含义 | 使用范例 |
| ------------------------------ | -------------------------------------------------------- | ------------------------------ |
| name | FSCrawler 任务的名称,用于区分不同的索引任务 | name: "fs_job_20240421" |
| fs.url | 需要被索引的文件或目录的路径 | url: "/tmp/es" |
| fs.update_rate | 文件系统检查更新的频率如15分钟检查一次 | update_rate: "15m" |
| fs.excludes | 定义哪些文件应该被排除在外的文件名模式列表(支持通配符) | excludes: ["*/~*"] |
| fs.json_support | 布尔值决定是否解析文件中的JSON内容 | json_support: false |
| fs.filename_as_id | 布尔值是否使用文件名作为Elasticsearch文档ID | filename_as_id: false |
| fs.add_filesize | 布尔值,决定是否将文件大小信息添加到索引中 | add_filesize: true" |
| fs.remove_deleted | 布尔值,决定是否从索引中删除已经在文件系统中删除的文件 | remove_deleted: true" |
| fs.add_as_inner_object | 布尔值,是否将文件信息作为内部对象添加 | add_as_inner_object: false" |
| fs.store_source | 布尔值,是否存储原始文件的内容 | store_source: false" |
| fs.index_content | 布尔值,决定是否索引文件内容 | index_content: true" |
| fs.attributes_support | 布尔值,是否索引文件的属性(如权限等信息) | attributes_support: false" |
| fs.raw_metadata | 布尔值,是否索引文件的原始元数据 | raw_metadata: false" |
| fs.xml_support | 布尔值是否解析和索引XML文件 | xml_support: false" |
| fs.index_folders | 布尔值,是否索引目录结构 | index_folders: true" |
| fs.lang_detect | 布尔值,是否进行语言检测并索引 | lang_detect: false" |
| fs.continue_on_error | 布尔值,是否在遇到错误时继续执行 | continue_on_error: false" |
| fs.ocr.language | OCR处理的语言 | language: "eng" |
| fs.ocr.enabled | 布尔值是否启用OCR功能 | enabled: true" |
| fs.ocr.pdf_strategy | OCR处理PDF文件的策略 | pdf_strategy: "ocr_and_text" |
| fs.follow_symlinks | 布尔值,是否跟随符号链接 | follow_symlinks: false" |
| elasticsearch.nodes.url | Elasticsearch节点的完整URL | url: "https://127.0.0.1:9200" |
| elasticsearch.bulk_size | 在单个批量请求中向Elasticsearch发送的最大文档数量 | bulk_size: 100" |
| elasticsearch.flush_interval | 批量操作的刷新间隔确保数据定期被写入Elasticsearch | flush_interval: "5s" |
| elasticsearch.byte_size | 指定批量请求的最大字节大小 | byte_size: "10mb" |
| elasticsearch.ssl_verification | 布尔值 | |
修改后的正确的可执行的配置如下:
```yaml
name: "fs_job_2024"
fs:
url: "/mingyi_install/zhiwang_fs"
update_rate: "1m"
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: "https://127.0.0.1:9200"
bulk_size: 100
flush_interval: "5s"
byte_size: "10mb"
ssl_verification: false
username: elastic
password: changeme
```
极简解读一下:
```
fs 相关的都是文件源头相关配置比如url 代表的是文件存储的路径。
而 elasticsearch 相关的都是:“目的端”,代表 Elasticsearch 集群相关配置。
在 elasticsearch 部分如果不设置 index 相关则同步到Elasticsearch 默认索引名为name下的 "fs_job_2024"名称。
```
更多细节配置参考:
```sh
https://fscrawler.readthedocs.io/en/latest/admin/fs/index.html#example-job-file-specification
```
> 9.X 版本安全需要设置用户名和密码,需要 https 通信。
**3.4 步骤 4: 运行 FSCrawler**
在配置文件设置完毕后,使用命令行启动 FSCrawler命令如下
```sh
bin/fscrawler --config_dir ./test fs_job_20240421
```
再次执行,就能将本地文件写入 Elasticsearch。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623145420075.png)
在 kibana Dev-tool 中,我们能看到两个索引。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623145440035.png)
其一索引名fs_job_2024 就是 _settings.yaml 配置文件中的最开头的 name。
其存储数据如下基本上文件想的信息比如文件内容、文件基础数据meta、文件创建/修改时间、扩展名、路径等全部都包含了。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623145450747.png)
其二索引名fs_job_2024_folder 是基于咱们定义的 name 自动生成和创建的。
存储的是配置的文件路径相关的基础信息。
![7903be0e80ac4b5bcd103bc875bc9c1e.png](https://i-blog.csdnimg.cn/blog_migrate/162ba0377255c72230137899cab4834f.png)
**3.5 步骤 5: 按业务需求修改 Mapping重新导入数据。**
Mapping 映射是默认生成的。
我们朴素的认知:倒排索引的不可变导致我们重新修改 Mapping 后必须重新导入数据。
默认的Mapping可能达不到业务的预期所以咱们必须得修改。
究竟如何改呢?——这个问题我反复验证几个不同方案超过三个小时,最后总结出如下核心步骤。
第一步:先同步讲数据写入 Elasticsearch
同步骤 3.4 所示。
```sh
bin/fscrawler --config_dir ./test fs_job_20240421
```
这个时候,如官方文档所述:
https://fscrawler.readthedocs.io/en/latest/admin/fs/elasticsearch.html#mappings
在 Elasticsearch 集群中会多了如下的索引模版和组件模版。
| 模版类型 | 模版名称 |
| -------- | ------------------------------------ |
| 索引模版 | fscrawler_docs_fs_job_2024 |
| 索引模版 | fscrawler_folders_fs_job_2024_folder |
| 索引模版 | fscrawler_folders_fs_job_folder |
| 索引模版 | fscrawler_docs_fs_job |
| 组件模版 | fscrawler_settings_total_fields |
| 组件模版 | fscrawler_mapping_file |
| 组件模版 | fscrawler_mapping_attributes |
| 组件模版 | fscrawler_mapping_path |
| 组件模版 | fscrawler_alias |
| 组件模版 | fscrawler_mapping_meta |
| 组件模版 | fscrawler_settings_shards |
| 组件模版 | fscrawler_mapping_content |
| 组件模版 | fscrawler_mapping_attachment |
如下指令我和可以看出,一个索引模版由多个组件模版组成。这是 Elasticsearch 模版的最新格式。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623145658987.png)
如上表格内容都是 fscrawler 在导入环节自动生成的。
第二步:禁用 FSCrawler 的自动模板推送
在我们之前的 FSCrawler 配置文件 _settings.yaml 中,设置 push_templates 为 false。
该设置阻止 FSCrawler 自动创建和更新 Elasticsearch 的索引模板。
配置示例如下:
```yaml
name: "fs_job_2024"
elasticsearch:
push_templates: false
```
##### 第三步:按需修改组件模版的部分参数
在禁用自动模板推送后,我们需要手动更新或创建所需的 component template以包含中文分词器。
例如,如果我们想对内容字段使用中文分词器,我们可以更新 fscrawler_mapping_content 模板如下:
```yaml
PUT _component_template/fscrawler_mapping_content
{
"template": {
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
######省略其他定制需求########
```
##### 第四步: 删除现有的索引
如果在 Elasticsearch 中已经存在由 FSCrawler 创建的索引,我们需要删除这些索引,因为索引的 mapping 一旦创建后不能直接修改(只能增加字段)。删除索引的命令如下:
```yaml
DELETE fs_job_2024_folder
DELETE fs_job_2024
```
请注意,这将删除所有相关数据,因此请确保我们已经备份了任何重要数据。
**第五步: 重启 FSCrawler**
在更新了 component template 并删除了旧索引后,重新启动 FSCrawler。
现在FSCrawler 将使用我们更新的 template 来创建新的索引,而这次新的索引将包含我们设置的中文分词器。
```
bin/fscrawler --config_dir ./test fs_job_20240421
```
##### 第六步:验证 Mapping
验证新创建的索引是否使用了正确的 mapping 设置。我们可以使用以下命令来查看索引的 mapping
```
GET fs_job_2024/_mapping
```
确保返回的信息中包含了我们配置的中文分词器。
![6b5a42f168ac2819cfc1d58795026f0b.png](https://i-blog.csdnimg.cn/blog_migrate/dffc17fdb1c5d810509b9f05b46d2606.png)
通过以上步骤,我们可以确保 FSCrawler 不会覆盖我们自定义的 Mapping同时能够使用中文分词器来索引文档内容。
这样配置后FSCrawler 在爬取文档到 Elasticsearch 的过程中,就会使用咱们刚才指定的中文分词器进行文本分析。
### 四、FSCrawler 常见使用错误与解决方案
在使用 FSCrawler 进行文件索引时,我们可能会遇到各种问题。本小节将列出一些常见的错误以及相应的解决方案,帮助我们更有效地使用 FSCrawler。
**4.1 问题一:索引大文件和小文件时出现错误**
问题描述当索引包含大小差异很大的文件时可能会遇到“HTTP Entity Too Large”错误 。
解决方案:此错误通常由 Elasticsearch 的 HTTP 请求体大小限制引起。我们可以通过增加服务器的接收限制来解决这个问题:
1.在 Elasticsearch 的配置文件 elasticsearch.yml 中,设置 http.max_content_length 的值更高(例如 200mb缺省100mb
2.重启 Elasticsearch 服务以使配置生效。
3.重新启动 FSCrawler 并再次尝试索引操作。
```
http.max_content_length: 200mb
```
参见:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html
**4.2 问题二:索引文件夹未在最新版本中创建**
问题描述:在使用最新版本的 FSCrawler 时,文件夹索引没有被创建 。
解决方案:这可能是由于 FSCrawler 的配置问题或是 Elasticsearch 版本兼容性问题。尝试以下方法:
1.检查 ~/.fscrawler/{job_name}/_settings.json 文件中的 fs.index_folders 设置,确保其值为 true。
2.确认我们的 Elasticsearch 版本与 FSCrawler 的版本兼容。在一些情况下FSCrawler 的新版本可能需要更新的 Elasticsearch 版本。
记得在进行任何配置修改或软件升级后,都应该重启相关服务,以确保所有的更改能够正确应用。
**4.3 问题三:反复闪退问题**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623150018611.png)
每次都要求重新创建文件即便已经反复确认创建成功了。这个我花了3个小时左右验证是版本问题需要咱们选择 2.10 最新日期的版本!
**4.4 问题四python Flask 连接报错——security_exception**
```
elasticsearch.exceptions.AuthenticationException: AuthenticationException(401, 'security_exception', 'missing authentication credentials for REST request [/fs_job/_search]')
```
Python 版本问题python 要3.10 以上!否则会报如上错误。
### 五、注意事项及小结
安全配置:在连接到 Elasticsearch 时,如果我们的集群配置了安全认证,确保我们的配置文件中填写了正确的用户名和密码。
OCR 设置如果需要从图像或PDF文档中提取文本请确保我们的系统上安装了 Tesseract OCR并正确配置在 FSCrawler 设置中。
性能优化:对于大数据量的文件处理,考虑适当增加 JVM 的内存分配,以及使用 SSD 硬盘来提升处理速度。
错误处理FSCrawler 会在控制台输出运行日志,如果遇到问题,日志是解决问题的第一手资料。