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,一经查实,立即删除!

相关文章

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

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

【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 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…

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

判断对象是否为空 网上也有许多方法,这里来整理一下 一、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…

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

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

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

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

【环境搭建】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?…

春秋云境:CVE-2022-25411[漏洞复现]

根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后,使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址:/admin/,根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi,我是贝格前端工场,GIS已经越来越多的应用在可视化大屏中了,开发GIS类应用就少不了地理空间数据,本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式,在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因: 程序错误人为,操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 2.数据库备份…

小窗口大魔力,实况窗服务实时掌控重要信息变化

移动互联网时代,各种以用户为中心的App如春笋般涌现,满足了用户在购物、导航、娱乐等不同场景下的需求,不同程度上丰富了用户的日常生活。然而,随着App种类的激增,用户在享受多样化服务的同时,也面临着多任…

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…

Linux安装frp实现内网穿透

Linux运维工具-ywtool 目录 一. 简介二.代理类型三.frp支持的Linux的架构四.安装1.准备工作2.配置frp服务器端(a)下载安装包(b)解压安装包(c)修改配置文件(d)启动服务端 3.配置frp客户端(a)下载安装包并修改配置文件(b)启动客户端 4.测试连接 五.其他1.多端口穿透(a)服务端(b)客…

【AI】存储自定义色板库

点击左上角色板,弹出色板框; 色板框的左下角有一个“色板库” 菜单,点击色板库菜单,弹出色板库; 色板库弹窗的第一条数据【存储色板】,点击存储色板,出现自定义色板所在文件路径; 找…

计算机毕业设计Thinkphp/Laravel校园体育器材管理系统

校园体育器材管理系统在流畅性,续航能力,等方方面面都有着很大的优势。这就意味着校园体育器材管理系统的设计可以比其他系统更为出色的能力,可以更高效的完成最新的体育器材、器材借用、器材归还、器材损坏、采购入库、器材报废、维修记录等…

Spring Boot整合RocketMQ实现延迟消息消费

导包 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version></dependency>添加配置信息 application配置文件 # rocketMq地址 rocketmq.name…

Ubuntu+Apache2 搭建Gerrit 环境

一、前言 时隔多年&#xff0c;好久没有更新CSDN 博客了&#xff0c;主要原因有如下两点&#xff1a; 1、平时工作繁忙&#xff0c;无暇更新。 2、工作内容涉及信息安全&#xff0c;一些工作经验积累不便更新到互联网上。 最近一直在折腾搭建Gerrit 环境&#xff0c;最开始是…