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

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.

参考文档:

# Elasticsearch FSCrawler 文档爬虫学习,请先看这一篇!
https://blog.csdn.net/laoyang360/article/details/138143195

一、FSCrawler 功能介绍

FSCrawler 提供了一种高效的方法来自动化文件的索引过程,支持多种文件格式,并具备以下核心功能:

多种文件支持能够处理包括但不限于PDF、Microsoft Office文档、OpenOffice文档等多种格式。

文本提取:从上述文件中提取文本,利用 OCR 技术处理图像和扫描的文档。

元数据提取:自动提取文件的元数据,如作者、标题、关键词等。

更新和同步:监视文件夹变化,自动更新索引以反映新增、修改或删除的文件。

安全:支持使用用户名和密码对 Elasticsearch 进行安全连接。

扩展性:可以配置为处理大规模的数据集。

二、FSCrawler 下载步骤指南

:需要开启VPN

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

这里其实有个小细节,默认最新版本的安装包在页面的最后面,需要不断地下拉到底才能找到。

三、FSCrawler 安装指南

安装很简单,只需要解压下载的文件即可。

将安装包下载或者远程拷贝到 Linux 服务器。

3.1 步骤1解压 FSCrawler

yum install unzip -y
unzip fscrawler-distribution-2.10-20250305.083042-479.zip 
cd fscrawler-distribution-2.10-SNAPSHOT/

3.2 步骤2启动 FSCrawler

为了方便咱们在部署路径本地修改和维护配置文件,我们要指定一个本地路径,同时需要写上一个 job 名称。

具体命令行参考如下:

mkdir test
bin/fscrawler --config_dir ./test fs_job_20240421

执行截图参考如下:

此处有交互,要选择:"y"

3.3 步骤3修改配置文件

经过步骤 2 后test 路径下会创建了名为“fs_job_20240421”的 job 任务,目录结构如下图所示。

yum install tree -y

tree test

我们先解读一下_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 布尔值

修改后的正确的可执行的配置如下:

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"名称。

更多细节配置参考:

https://fscrawler.readthedocs.io/en/latest/admin/fs/index.html#example-job-file-specification

9.X 版本安全需要设置用户名和密码,需要 https 通信。

3.4 步骤 4: 运行 FSCrawler

在配置文件设置完毕后,使用命令行启动 FSCrawler命令如下

bin/fscrawler --config_dir ./test  fs_job_20240421

再次执行,就能将本地文件写入 Elasticsearch。

在 kibana Dev-tool 中,我们能看到两个索引。

其一索引名fs_job_2024 就是 _settings.yaml 配置文件中的最开头的 name。

其存储数据如下基本上文件想的信息比如文件内容、文件基础数据meta、文件创建/修改时间、扩展名、路径等全部都包含了。

其二索引名fs_job_2024_folder 是基于咱们定义的 name 自动生成和创建的。

存储的是配置的文件路径相关的基础信息。

7903be0e80ac4b5bcd103bc875bc9c1e.png

3.5 步骤 5: 按业务需求修改 Mapping重新导入数据。 Mapping 映射是默认生成的。

我们朴素的认知:倒排索引的不可变导致我们重新修改 Mapping 后必须重新导入数据。

默认的Mapping可能达不到业务的预期所以咱们必须得修改。

究竟如何改呢?——这个问题我反复验证几个不同方案超过三个小时,最后总结出如下核心步骤。

第一步:先同步讲数据写入 Elasticsearch 同步骤 3.4 所示。

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 模版的最新格式。

如上表格内容都是 fscrawler 在导入环节自动生成的。

第二步:禁用 FSCrawler 的自动模板推送 在我们之前的 FSCrawler 配置文件 _settings.yaml 中,设置 push_templates 为 false。

该设置阻止 FSCrawler 自动创建和更新 Elasticsearch 的索引模板。

配置示例如下:

name: "fs_job_2024"
elasticsearch:
  push_templates: false
第三步:按需修改组件模版的部分参数

在禁用自动模板推送后,我们需要手动更新或创建所需的 component template以包含中文分词器。

例如,如果我们想对内容字段使用中文分词器,我们可以更新 fscrawler_mapping_content 模板如下:

PUT _component_template/fscrawler_mapping_content
{
  "template": {
    "mappings": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}
######省略其他定制需求########
第四步: 删除现有的索引

如果在 Elasticsearch 中已经存在由 FSCrawler 创建的索引,我们需要删除这些索引,因为索引的 mapping 一旦创建后不能直接修改(只能增加字段)。删除索引的命令如下:

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

通过以上步骤,我们可以确保 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 问题三:反复闪退问题

每次都要求重新创建文件即便已经反复确认创建成功了。这个我花了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 会在控制台输出运行日志,如果遇到问题,日志是解决问题的第一手资料。