当前位置: 首页 > article >正文

基于Linux环境部署和使用ElasticSearch搜索引擎

目录

  • 一.Elasticsearch基础介绍
  • 二.Docker部署单节点ElasticSearch
    • 1.环境配置
    • 2.创建数据目录
    • 3.创建ES自定义配置文件
    • 4.启动ElasticSearch服务
    • 5.验证服务
  • 三.Docker Compose部署单节点ElasticSearch
    • 1.环境配置
    • 2.创建docker-compose.yml
    • 3.创建配置文件elasticsearch.yml
    • 4.启动ElasticSearch服务
    • 5.验证服务
  • 四.Docker部署ElasticSearch集群
    • 1.Docker启动单节点集群
    • 2.Docker Compose启动多节点集群
      • 2.1创建docker-compose.yml文件
      • 2.2运行docker-compose启动集群
  • 五.Elasticsearch可视化
    • 1.Elasticsearch-head
    • 2.Elasticsearch-head插件安装和使用
  • 六.Elasticsearch基础操作
  • 七.Elasticsearch使用资料

一.Elasticsearch基础介绍

  • Elasticsearch为所有类型的数据提供实时搜索和分析。无论您是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。
  • Elasticsearch是一个分布式文档存储。Elasticsearch不会将信息存储为列数据的行,而是存储已序列化为JSON文档的复杂数据结构。当集群中有多个Elasticsearch节点时,存储的文档将分布在集群中,并且可以从任何节点立即访问。
  • Elasticsearch使用称为倒排索引的数据结构,该结构支持非常快速的全文本搜索。反向索引列出了出现在任何文档中的每个唯一单词,并标识了每个单词出现的所有文档。
  • Elasticsearch提供了一个简单,一致的REST API,用于管理集群以及索引和搜索数据,支持结构化查询,全文查询和结合了两者的复杂查询。
  • 理解集群(cluster)、 节点(node)、索引(index)、 类型(type)、文档(document)、分片和复制(shards & replicas)等概念。映射(Mapping)用于定义一个索引(index)的某个类型(type)的数据的结构(类似于传统关系型数据中table的schema),mapping中主要包括字段名、字段数据类型和字段索引类型。

二.Docker部署单节点ElasticSearch

1.环境配置

  • 基础环境
# Docker 
Docker version 26.1.4, build 5650f9b
# 系统信息
Operating System: openEuler 24.03 (LTS)
Kernel: Linux 6.6.0-28.0.0.34.oe2403.x86_64
Architecture: x86-64
  • 拉取镜像
# 拉取 elasticsearch docker 镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.4.3

2.创建数据目录

mkdir -p /data/es/{data,config,logs}
chown 1000:0 /data/es/{data,logs}

3.创建ES自定义配置文件

  • 编写 elasticsearch.yml 配置文件,挂载到容器配置文件目录(/usr/share/elasticsearch/config)
  • elasticsearch.yml 文件内容(该配置文件是针对Elasticsearch 8.4.3版本的配置内容,Elasticsearch的配置可能会根据版本和特定用例而有所不同)
ingest.geoip.downloader.enabled: false
http.host: 0.0.0.0
node.name: node-1
cluster.name: es-cluster
path.data: /data/elasticsearch-8.4.3/data
path.logs: /data/elasticsearch-8.4.3/logs
xpack.security.http.ssl.enabled: false
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length
cluster.routing.allocation.disk.threshold_enabled: false
  • elasticsearch.yml文件说明

    • ingest.geoip.downloader.enabled: false 禁用了GeoIP数据的下载;GeoIP 是一种用于根据 IP地址查找地理位置信息的功能,通过将其设置为“false”,将禁用此功能

    • http.host: 0.0.0.0 指定 Elasticsearch 服务 HTTP请求地址;“0.0.0.0”意味着服务将监听所有可用的网络接口,允许Elasticsearch接受来自任何IP地址的HTTP请求

    • node.name: node-1 指定 Elasticsearch 节点的名称,Elasticsearch集群中的每个节点必须有一个唯一的名称

    • cluster.name: es-cluster 指定 Elasticsearch 集群的名称,属于同一集群的节点应该配置相同的集群名称

    • path.data: /data/elasticsearch-8.4.3/data 指定 Elasticsearch 数据存储路径

    • path.logs: /data/elasticsearch-8.4.3/logs 指定 Elasticsearch 日志存储路径

    • xpack.security.http.ssl.enabled: false 控制HTTP通信是否启用SSL/TLS加密,通过将其设置为“false”,HTTP流量的SSL/TLS加密被禁用

    • xpack.security.enabled: false 是否启用X-Pack安全特性;X-Pack是Elastic (Elasticsearch背后的公司)提供的一组商业功能,通过将其设置为“false”,将禁用这些安全功能

    • xpack.security.transport.ssl.enabled: false 控制是否为传输层启用SSL/TLS加密,传输层处理Elasticsearch节点之间的通信;通过将其设置为“false”,在节点到节点的通信中禁用SSL/TLS加密

    • http.cors.enabled: true 开启Elasticsearch HTTP服务的CORS (Cross-Origin Resource Sharing)功能;CORS是一个安全特性,允许从运行在不同域上的web浏览器控制访问Elasticsearch资源

    • http.cors.allow-origin: “*” 指定CORS请求允许的源(域);’ * ’ 通配符表示允许任何域向Elasticsearch发出CORS请求

    • http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length 定义了CORS请求允许的HTTP头列表;CORS请求Elasticsearch时,允许使用指定的头,如Authorization、X-Requested-With、Content-Type、Content-Length

4.启动ElasticSearch服务

# 在Docker中运行Elasticsearch 8.4.3镜像
docker run --name elasticsearch --net=host --restart=always -d -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m"  -v /data/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/es/logs:/data/elasticsearch-8.4.3/logs -v /data/es/data:/data/elasticsearch-8.4.3/data elasticsearch:8.4.3
  • -name elasticsearch:将容器命名为 elasticsearch
  • –net=host:使用主机网络模式,使Elasticsearch能够直接使用主机的网络接口
  • –restart=always:设置容器在退出时自动重启
  • -d:以后台模式运行容器
  • -e ES_JAVA_OPTS=“-Xms2048m -Xmx2048m”:设置Elasticsearch的Java堆内存大小为2048MB;ES_JAVA_OPTS=“-Xms1g -Xmx1g” 表示设置最小和最大 JVM 堆大小为 1 GB
  • -v /data/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将主机上的elasticsearch.yml文件挂载到容器内的相应路径,用于自定义Elasticsearch的配置
  • -v /data/es/logs:/data/elasticsearch-8.4.3/logs:将主机上的日志目录挂载到容器内的相应路径,用于存储Elasticsearch的日志
  • -v /data/es/data:/data/elasticsearch-8.4.3/data:将主机上的数据目录挂载到容器内的相应路径,用于存储Elasticsearch的数据

5.验证服务

# 验证 elasticsearch 服务是否正常运行,elasticsearch 默认使用 9200 端口进行http请求
curl http://localhost:9200
# 在浏览器的地址栏输入https://localhost:9200
# Elasticsearch-head可视化工具查看内容

三.Docker Compose部署单节点ElasticSearch

1.环境配置

# 创建network
docker network create elastic
# 拉取镜像,如拉取版本8.12.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2
# 创建挂载目录,赋予读写权限
mkdir -p ./es/{data,config,plugins}
chmod -R 777 ./es
# es部署目录下创建docker-compose.yml文件

2.创建docker-compose.yml

version: '3.8'
services:
  es01:
    container_name: es01
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=sc2024
      - TZ=Asia/Shanghai
    ports:
      - "9200:9200"
      - "9300:9300"
    mem_limit: 1g
    volumes:
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./es/plugins:/usr/share/elasticsearch/plugins
      - ./es/data:/usr/share/elasticsearch/data      
    networks:
      - elastic
networks:
  elastic:
    external: true

3.创建配置文件elasticsearch.yml

# 配置host为0.0.0.0 允许远程访问
http.host: 0.0.0.0
# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
# 开启密码访问,如果不开启密码访问则设置为false
xpack.security.enabled: true

4.启动ElasticSearch服务

# docker-compose.yml的同级目录下执行如下命令启动服务
docker-compose up -ddocker compose up -d

5.验证服务

  • 在浏览器中访问:http://10.0.28.84:9200
#默认用户名 elastic
用户名:elastic
# 密码在docker-compose.yml 中配置的环境变量ELASTIC_PASSWORD的值
密码:your password

四.Docker部署ElasticSearch集群

1.Docker启动单节点集群

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --net=elastic --name elasticsearch -v /data/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/es/data:/usr/share/elasticsearch/data -v /data/es/plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:8.4.3

2.Docker Compose启动多节点集群

2.1创建docker-compose.yml文件

version: '3.8'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./es/data01:/usr/share/elasticsearch/data
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./es/plugins:/usr/share/elasticsearch/plugins     
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./es/data02:/usr/share/elasticsearch/data
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./es/plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./es/data03:/usr/share/elasticsearch/data
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./es/plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic
volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
networks:
  elastic:
    # driver: bridge
    external: true
  • docker-compose.yml 使用环境变量 ES_JAVA_OPTS 手工设置堆大小为 512 MB。我们不推荐在生产环境使用 ES_JAVA_OPTS。

  • Docker Compose 文件,提供了一个三节点 Elasticsearch 集群。节点 es01 监听 localhost:9200,es02 和 es03 通过 Docker 网络与 es01 通信

  • 此配置在所有网络接口上暴露端口 9200,Elasticsearch 集群可以公开访问,可能会忽略任何防火墙设置。如果不想暴露端口 9200,转而使用反向代理,在 docker-compose.yml 文件中用 127.0.0.1:9200:9200 替代 9200:9200。Elasticsearch 将只能从主机自身访问。

  • Docker 命名卷 data01、data02 和 data03 存储节点数据目录,以便重启时数据持续存在。如果他们不存在,docker-compose 将会在你创建集群时创建他们

2.2运行docker-compose启动集群

# 启动集群,使用 docker-compose up 重启集群,Docker 卷中的数据将被保存和加载
docker-compose up
# 提交请求 _cat/nodes 查看节点是否启动运行
curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"
# 停止集群
docker-compose down
# 在停止集群时删除数据卷,指定 -v 选项
docker-compose down -v
  • 默认情况下,你可以使用 docker logs 访问日志。如果你更想 Elasticsearch 容器把日志写入磁盘,设置环境变量 ES_LOG_STYLE 为 file。这将导致 Elasticsearch 使用与其他 Elasticsearch 分发格式相同的配置。

五.Elasticsearch可视化

1.Elasticsearch-head

  • Elasticsearch-head是一种便捷查询操作Elasticsearch库的可视化工具,具备集群管理、增删查改等功能,用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。
  • Elasticsearch-head为ES开发的一个页面客户端工具,其源码托管于GitHub,地址为:https://github.com/mobz/elasticsearch-head

2.Elasticsearch-head插件安装和使用

  • 下载插件,下载插件地址:https://github.com/liufengji/es-head。
  • 修改名称并解压,将elasticsearch-head.crx更名为elasticsearch-head.rar 再解压,进入elasticsearch-head文件夹将_metadata文件夹重命名为metadata。
  • 安装插件,打开Google浏览器右上角设置>>>更多工具>>>扩展程序>>>,点击加载已解压的扩展程序,选择解压elasticsearch-head文件夹即可添加插件成功。
  • 输入连接地址ip:端口号后点链接即可,如需有ES安全认证会弹出账号和密码输入后登录即可,连接后显示绿色代表健康。

六.Elasticsearch基础操作

  • 创建 Elasticsearch 客户端并连接到 Elasticsearch
from elasticsearch import Elasticsearch
ES_HOSTS = 'http://localhost:9200'
# maxsize设置连接池中每个节点的最大连接数,timeout设置请求超时时间,retry_on_timeout超时后重试请求
def initialize_es(ES_HOSTS):
    es_client = Elasticsearch(hosts=ES_HOSTS,maxsize=1000,timeout=30,retry_on_timeout=True)
    health = es_client.cluster.health()  # 检查ES集群健康状态
    return es_client
  • 创建或更新 Elasticsearch 索引用于存储特征向量
def create_es_index(es_client, index_name, dims=1024):
    if not es_client.indices.exists(index=index_name):
        mapping = {
            "mappings": {
                "properties": {
                    "id": {"type": "keyword"},
                    "embeddings": {
                        "type": "dense_vector", 
                        "dims": dims,
                        "index": True, 
                        "similarity": "cosine"
                    },
                    "original_path": {"type": "keyword"},
                    "thumbnail_path": {"type": "keyword"}
                }
            }
        }
        es_client.indices.create(index=index_name, body=mapping)
  • 在 Elasticsearch 索引中添加文档数据
doc = {"id": image_id,"embeddings": vector,"original_path": original_url,"thumbnail_path": thumbnail_url}
es_client.index(index=index_name, id=doc['id'], document=doc)
  • Elasticsearch 增删改查索引和增删改查索引中的数据等通用操作,查询数据包括复合查询、切片查询、范围查询、前缀查询、通配符查询、正则匹配查询、排序查询、滚动查询等
es_client.indices.create(index=index_name, body=mapping) # 创建索引
index_info = es_client.indices.get(index=index_name) # 查询索引
if es.indices.exists(index=index_name): # 判断索引是否存在
    es.indices.delete(index=index_name)  # 删除索引
es_client.index(index=index_name, id=doc['id'], document=doc)  # 添加数据,更新数据(如果当前id存在则为更新)
res = es_client.search(index=index_name, body=query) # 查询数据,根据查询方式更改query

七.Elasticsearch使用资料

  • elasticsearch查询客户端 es-client:项目主页 | es-client
  • elasticsearch 未授权访问漏洞验证及修复
  • Python Elasticsearch client
  • elasticsearch-head
  • Python Elasticsearch client
  • elasticsearch-head
  • Elasticsearch 教程

http://www.kler.cn/a/579060.html

相关文章:

  • C# 开发工具Visual Studio下载和安装
  • ubuntu20.04已安装 11.6版本 cuda,现需要通过源码编译方式安装使用 cuda 加速的 ffmpeg 步骤
  • 【MySQL】(4) 表的操作
  • Spring Boot 内置工具类,功能齐全!!
  • MoonSharp 文档一
  • 2025年最新可用!Docker/DockerHub 国内镜像源/加速列表
  • 【蓝桥杯每日一题】3.8
  • Vue.js框架设计核心要素解析
  • 【GPT入门】第8课 大语言模型的自洽性
  • 安固软件指南:确保外发文件安全的全面策略
  • 腾讯云大模型知识引擎LKE+DeepSeek结合工作流升级智能客服
  • ESP8266TCP单连接透传
  • RabbitMQ从入门到实战-2
  • 计算机视觉cv2入门之图像的读取,显示,与保存
  • STM32-USART串口数据包
  • 大白话JavaScript闭包实现原理与在实际开发中的应用场景
  • 六十天前端强化训练之第八天到第十四天——综合案例:用户管理系统
  • PHP:格式化JSON为PHP语法格式
  • 【贪心算法】将数组和减半的最小操作数
  • Python 数据可视化创意分享:解锁数据之