Linux 安装ElasticSearch + FSCrawler 扫描本地的文件资源

文章目录

  • 0. 前言
  • 1. 安装ElasticSearch
    • 1.1 下载安装包
    • 1.2 新增用户
    • 1.3 解压安装包
    • 1.4 更改文件夹用户
    • 1.5 修改配置文件
    • 1.6 修改系统配置
    • 1.7 启动集群
  • 2. 安装FSCrawler
    • 2.1 下载安装包
    • 2.2 创建配置文件
    • 2.3 修改配置文件
    • 2.4 启动
    • 2.5 验证是否被索引


0. 前言

Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于各种数据搜索、日志和数据分析的场景。Elasticsearch 以其强大的实时搜索能力、可伸缩性和易用性而著称。

典型使用场景
(1)日志分析:Elasticsearch 常与 Logstash 和 Kibana 一起使用,构成 ELK/Elastic Stack,用于收集、处理和可视化日志数据。
(2)全文搜索:适用于网站、应用程序和其他系统的搜索功能,提供快速、精准的搜索结果。
(3)数据分析:可以用于分析各种数据,如用户行为数据、财务数据、物联网数据等,支持实时和离线分析。
(4)监控和报警:用于监控系统的性能和健康状态,基于设定的规则触发报警。

1. 安装ElasticSearch

1.1 下载安装包

建议7.x版本的ElasticSearch

二选一:

(1)手动下载安装包

  • 官方链接。如果下载太慢,这个不推荐。

  • 华为镜像包。推荐。

(2)linux 命令安装

wget https://mirrors.huaweicloud.com/elasticsearch/7.9.3/elasticsearch-7.9.3-linux-x86_64.tar.gz

1.2 新增用户

所有节点都需要操作

ElasticSearch 不允许 root 用户操作,需要新建用户(在所有节点上都需要新增用户):

useradd es # 新增 es 用户
passwd es # 为 es 用户设置密码

此时 /home 应该会创建一个新的目录 es

1.3 解压安装包

所有节点都需要操作

将压缩包拷贝到 /home/es 下,然后解压:

tar -zxf elasticsearch-7.9.3-linux-x86_64.tar.gz

1.4 更改文件夹用户

所有节点都需要操作

chown -R es:es elasticsearch-7.9.3

1.5 修改配置文件

所有节点都需要操作

elasticsearch.yml 配置字段说明:

cluster.name # 配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。node.name # 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中node.master # 指定该节点是否有资格被选举成为master,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。node.data # 指定该节点是否存储索引数据,默认为true。index.number_of_shards # 设置默认索引分片个数,默认为5片。分片的数量:
# 1, 单个分片的大小不要超过32g —— 控制每个分片占用的硬盘容量不超过ES的最大JVM的堆空间设置(一般设置不超过32G,参加上文的JVM设置原则),因此,如果索引的总容量在500G左右,那分片大小在16个左右即可;当然,最好同时考虑原则2。# 2. shard总数量不超过节点数的3倍 —— 考虑一下node数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,很可能会导致一个节点上存在多个分片,一旦该节点故障,即使保持了1个以上的副本,同样有可能会导致数据丢失,集群无法恢复。所以, 一般都设置分片数不超过节点数的3倍。index.number_of_replicas # 设置默认索引副本个数,默认为1个副本。path.conf # 设置配置文件的存储路径,默认是es根目录下的config文件夹。path.data # 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:path.data: /path/to/data1,/path/to/data2path.work # 设置临时文件的存储路径,默认是es根目录下的work文件夹。path.log # 设置日志文件的存储路径,默认是es根目录下的logs文件夹path.plugins # 设置插件的存放路径,默认是es根目录下的plugins文件夹bootstrap.mlockall # 设置为true来锁住内存。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。network.bind_host # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。network.publish_host # 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。network.host # 这个参数是用来同时设置bind_host和publish_host上面两个参数。transport.tcp.port # 设置节点间交互的tcp端口,默认是9300。transport.tcp.compress # 设置是否压缩tcp传输时的数据,默认为false,不压缩。http.port # 设置对外服务的http端口,默认为9200。http.max_content_length # 设置内容的最大容量,默认100mbhttp.enabled # 是否使用http协议对外提供服务,默认为true,开启。gateway.type # gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器。gateway.recover_after_nodes # 设置集群中N个节点启动时进行数据恢复,默认为1。gateway.recover_after_time # 设置初始化数据恢复进程的超时时间,默认是5分钟。gateway.expected_nodes # 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。cluster.routing.allocation.node_initial_primaries_recoveries # 初始化数据恢复时,并发恢复线程的个数,默认为4。cluster.routing.allocation.node_concurrent_recoveries # 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。indices.recovery.max_size_per_sec # 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。indices.recovery.concurrent_streams # 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。discovery.zen.minimum_master_nodes # 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)discovery.zen.ping.timeout # 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。discovery.zen.ping.multicast.enabled # 设置是否打开多播发现节点,默认是true。discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"] # 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。

例如,修改一个 elasticsearch-7.9.3/config/elasticsearch.yml 配置文件:

# 集群名称
cluster.name: cluster-es
# 当前节点名称,每个节点名字都需要设置,不能重复
node.name: node-1
# 当前对外的节点ip/域名地址,设置为0.0.0.0,那么就不限制主机的访问和节点的交互
network.host: 0.0.0.0
# 是不是有资格成为主节点
node.master: true
node.data: true
http.port: 9200
# head插件需要配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
# 7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
# 7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["node2:9300","node3:9300","node4:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
# 集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
# 添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
# 初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16

对于集群的其他节点,也需要修改上述文件,例如node2配置文件如下:

# 集群名称
cluster.name: cluster-es
# 当前节点名称,每个节点名字都需要设置,不能重复
node.name: node-2
# 当前对外的节点ip/域名地址,设置为0.0.0.0,那么就不限制主机的访问和节点的交互
network.host: 0.0.0.0
# 是不是有资格成为主节点
node.master: true
node.data: true
http.port: 9200
...

1.6 修改系统配置

所有节点都需要操作

/etc/security/limits.conf 在最后一行添加:

es soft nofile 65536
es hard nofile 65536

/etc/sysctl.conf,添加如下:

vm.max_map_count=655360

配置生效:

sysctl -p

1.7 启动集群

所有节点,用es用户执行

二进制启动:

/home/es/elasticsearch-7.9.3/bin/elasticsearch -d

检查是否当前正常工作:

curl localhost:9200
{"name" : "node-1","cluster_name" : "cluster-es","cluster_uuid" : "EFgx4qIcRo-_oAtAzQCabg","version" : {"number" : "7.9.3","build_flavor" : "default","build_type" : "tar","build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868","build_date" : "2020-10-16T10:36:16.141335Z","build_snapshot" : false,"lucene_version" : "8.6.2","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

检查集群节点是否正常:

curl localhost:9200/_cat/nodes
192.168.76.116 27 97  9 19.83 20.97 21.14 dilmrt - node-3
192.168.76.114 25 98  4  8.62  8.81  8.82 dilmrt * node-1
192.168.76.115 17 77 11 21.00 21.30 21.36 dilmrt - node-2

2. 安装FSCrawler

2.1 下载安装包

下载链接看这里
ElasticSearch 7.x 版本对应 fscrawler-es7-2.9;
ElasticSearch 6.x 版本对应 fscrawler-es6-2.9;

在这里插入图片描述

2.2 创建配置文件

进入到解压的 fscrawler 文件夹中,执行:

./bin/fscrawler my_file_job --config_dir /xx/xxx

--config_dir 是指定配置文件的路径,选择自己的路径即可;

在这里插入图片描述
在你指定的 --config_dir 下会创建一个 _setting.yaml

2.3 修改配置文件

默认的 _setting.yaml 如下:

---
name: "my_file_job"
fs:url: "/tmp/es"update_rate: "15m"excludes:- "*/~*"json_support: falsefilename_as_id: falseadd_filesize: trueremove_deleted: trueadd_as_inner_object: falsestore_source: falseindex_content: trueattributes_support: falseraw_metadata: falsexml_support: falseindex_folders: truelang_detect: falsecontinue_on_error: falseocr:language: "eng"enabled: truepdf_strategy: "ocr_and_text"follow_symlinks: false
elasticsearch:nodes:- url: "http://127.0.0.1:9200"bulk_size: 100flush_interval: "5s"byte_size: "10mb"ssl_verification: true

其中有关 _setting.yaml 的字段解释:
(1)fs字段配置,官方参考这里

name: "my_file_job"
fs:url: "/path/to/your/data"           # 要索引的文件系统路径update_rate: "15m"                  # 多长时间检查一次文件更新includes: ["*.txt", "*.pdf"]        # 包含的文件类型excludes: ["*.log", "*/temp/*"]     # 排除的文件类型json_support: false                 # 是否支持 JSON 文件filename_as_id: true                # 是否使用文件名作为文档IDadd_filesize: true                  # 是否添加文件大小字段remove_deleted: true                # 是否从索引中删除已删除文件store_source: true                  # 是否存储文件源indexed_chars: 10000                # 索引的字符数attributes_support: true            # 是否索引文件属性raw_metadata: true                  # 是否索引原始元数据xml_support: false                  # 是否支持 XML 文件index_content: true                 # 是否索引文件内容index_folders: true                 # 是否索引文件夹follow_symlinks: false              # 是否跟随符号链接lang_detect: true                   # 是否启用语言检测continue_on_error: false            # 是否在错误时继续pdf_ocr: true                       # 是否对 PDF 文件使用 OCRocr:language: "eng"                   # OCR 的语言path: "/path/to/tesseract"        # Tesseract OCR 的路径data_path: "/path/to/tessdata"    # Tesseract 数据路径

(2)elasticsearch字段配置,官方参考这里

name: "my_file_job"
elasticsearch:nodes:- url: "http://localhost:9200"   # Elasticsearch 节点的 URLusername: "elastic"            # 连接 Elasticsearch 的用户名password: "changeme"           # 连接 Elasticsearch 的密码bulk_size: 100                     # 批量处理的文档数量flush_interval: "5s"               # 刷新间隔时间byte_size: "10mb"                  # 批量请求的字节大小限制index: "fscrawler_index"           # 索引名称index_folder: "fscrawler_folder_index" # 文件夹索引名称type: "_doc"                       # 文档类型(Elasticsearch 7.x 之后建议使用 `_doc`)pipeline: "attachment"             # 指定的 Ingest 管道

2.4 启动

修改完配置文件之后,再次执行:

./bin/fscrawler my_file_job --config_dir /xx/xxx

2.5 验证是否被索引

(1)使用 curl 检查索引

curl -X GET "localhost:9200/_cat/indices?v"

能够看到一个名为 my_file_job 的索引。

(2)返回包含搜索词 your_search_term 的文档。

# 使用 cURL 查询索引数据
curl -X GET "localhost:9200/my_file_job/_search?q=content:your_search_term&pretty"

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python保存csv的3种方法

pandas的to_csv方法 embeddings_df.to_csv("patients_note_embedding.csv", indexFalse) #embeddings_df改成自己的数据名字np.savetxt方法 np.savetxt("patients_note_embedding.csv", embeddings_df.values, delimiter",", fmt"%s"…

CDGA|数据治理新策略:完善分级分类,打破算法偏见枷锁

在数字化时代,数据已成为企业运营和社会发展的核心驱动力。然而,随着数据量的爆炸性增长,数据治理的重要性也日益凸显。其中,数据分级分类和算法偏见等问题成为了当前数据治理面临的关键挑战。 数据分级分类:确保数据的…

linux的安装程序 与 文件 相关的命令

#Linux系统命令 软件安装卸载命令 软件包介绍 软件包中包含安装的可执行程序(binary),包含软件的说明文档,包含软件的使用的 man手册等,将这些内容打包成一个软件包,可以给用户安装使用。 (1).deb:ubu…

【面试题】Linux下的GDB(第二篇)

1.GDB是什么?其主要功能有哪些? GDB是GNU开源组织发布的一个强大的Unix/Linux下的程序调试工具。其主要功能包括: 启动用户程序后,可以按照用户的要求随意运行程序。 可让被调试的程序在用户所设定的断点处停住。 当程序被停住…

【Web服务与Web应用开发】【C#】创建第一个简单的WCF服务应用程序 WCF Service Application(图文详情)

目录 0.简介 1.环境 2.知识点 3.详细过程 1)打开 Visual Studio 2019 ,下载所需插件 2)创建WCF服务应用项目 3)打开 【IService1.cs 】在此处定义服务函数 4)打开 【Service1.svc.cs】实现服务函数 5&#x…

linux的vim最全教程

基础概念 模式:Vim有多种模式,主要为命令模式(Normal mode)、插入模式(Insert mode)、可视模式(Visual mode)、末行模式(Command-line mode)等。默认启动时处于命令模式。 进入与退出: 启动:在终端输入vim [filename]或vi [filen…

LINUX centos 安装jenkins超超超超超超级详细步骤

Jenkins安装 配置jdkmavengit jenkins 拉取 配置 jdk 1.安装jdk8 yum install java-1.8.0-openjdk-devel2.检查版本 java -version出现如下图查看版本信息 3. 设置JAVA_HOME环境变量 vim /etc/profile最下方输入 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk expor…

在 Vue 中调用方法传入值,并在方法执行期间修改传入的值,是否会影响方法内部的值,取决于传入值的类型

在 Vue 中调用方法传入值,并在方法执行期间修改传入的值,是否会影响方法内部的值,取决于传入值的类型 一、前言1. 传入基本类型值(如数字、字符串)2.传入引用类型值(如对象、数组) 一、前言 在…

Qt 实战(6)事件 | 6.2、事件过滤器

文章目录 一、事件过滤器1、什么是事件过滤器?2、如何实现事件过滤器?3、应用示例4、总结 前言: 在Qt的事件处理机制中,事件过滤器(Event Filter)是一种非常强大且灵活的工具,它允许开发者在一个…

判断对象是否为空的多种方式

判断对象是否为空 网上也有许多方法,这里来整理一下 一、Object.keys(obj) ES6 写法: const data {}; const arr Object.keys(data); console.log(arr.length); // 0二、JSON.stringify() const obj {}; const arr JSON.stringify(obj); console.…

4.整合第三方技术【整合JUnit】

目录 1.创建项目: 2.导入测试对应的starter 3.添加测试对象 3.1 添加Prodcut接口文件 3.2 添加ProdcutImpl文件 3.3 测试类添加测试文件,并开始测试 4.测试类文件解析 4.1.测试类使用SpringBootTest修饰 4.2使用自动装配的形式添加要测试的对象 1.…

【PromptCC】遥感图像变化字幕的解耦范式

摘要 以往的方法忽略了任务的显著特异性:对于不变和变化的图像对,RSICC难度是不同的,以一种耦合的方式处理未变化和变化的图像对,这通常会导致变化字幕的混淆。论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp…

Linux 在文件内读取时间段字符串并解析判断当前时间是否在时间段内 C语言

最近需要实现一个判断当前是否是上班时间段内,但是需要从文件中读取特定的格式时间时间段 格式: 00:00-12:34|13:56-15:00(不确定几个时间段,每个时间段以|分隔) 读取特定格式时间并转化不难但是挺麻烦的 //获得当前中国时区时间 void getNowTime(char* bufTime,int bufTime…

ubuntu bin目录

ubuntu bin目录 在Ubuntu以及其他Unix和Linux系统中,bin目录扮演着非常重要的角色。这个名字bin来自“binary”的缩写,意味着这些目录包含二进制可执行文件,即那些编译过的程序,用户和系统可以直接运行这些程序。 不同类型的bin…

Trip.com 如何从 Elasticsearch 迁移到 ClickHouse 并构建了 50PB 的日志解决方案

本文字数:8721;估计阅读时间:22 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 在 Trip.com,我们为用户提供广泛的数字产品,包括酒店和机票预订、景点、旅游套餐、商务…

java创建0byte的空文件

在Java中,使用File类创建一个文件通常不会自动创建一个0字节的文件,它只是用来表示文件系统中的一个文件或目录。如果你想要创建一个0字节的文件,你需要使用FileOutputStream来写入文件。以下是创建一个0字节文件的示例代码: imp…

专业英语词汇(计算机)

purpose 目的 phase 阶段 investigate 调查 satisfy 满足 delivering 提供 交付 collaboration 协作 architecture 结构 storage 存储 enterprise 企业 extreme 极端 feedback 反馈 courage 勇气 effort 努力 essential 基本上 crisply 清晰的 precise 精确的 critical 关键 ap…

电脑复制按哪个键?还不会操作的赶紧来看!

当我们提到“电脑复制按哪个键”时,实际上是在讨论电脑键盘上用于执行复制操作的快捷键。复制功能在日常的电脑操作中极为常用,无论是文本编辑、文件处理还是图片操作,都离不开复制这一基本功能。以下,我们将深入探讨电脑复制操作…

【环境搭建】windows下MySQL8与5共存

目录 一、安装MySQL81.官网下载2.初始化mysql文件夹中my.ini文件3.初始化data文件夹,并记录初始密码4.安装服务,指定服务名称5.启动服务6.测试登录并修改密码 二、安装MySQL51.mysql5文件夹中初始化my.ini文件2.初始化data文件夹,并记录初始密…

GraphQL:简介

GraphQL 图片来源: 我们将探索GraphQL 的基础知识,并学习如何使用Apollo将其与 React 和 React Native 等前端框架连接起来。这将帮助您了解如何使用 GraphQL、React、React Native 和 Apollo 构建现代、高效的应用程序。 什么是 GraphQL?…