NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 消息队列

  • 搜索引擎

    • ElasticSearch

      • 概述
      • 环境搭建
        • 通过Docker方式安装ElasticSearch和kibana
          • 创建网络
          • 部署单点es
          • 部署kibana
        • 安装IK中文分词器
          • 在线安装ik插件(较慢)
          • 离线安装ik插件(推荐)
          • 查看数据卷目录
          • 解压缩分词器安装包
          • 上传到es容器的插件数据卷中
          • 重启容器
          • 测试
          • 词库拓展和停用词典
      • 操作 - Restful
      • 操作 - RestClinet(弃用)
      • 操作 - Spring Data
      • 示例 - 黑马旅游
      • 查询 - 数据聚合
      • ElasticSearch - 自动补全与自定义分词器
      • ElasticSearch - 数据同步
      • ElasticSearch - 集群
  • 中间件
  • 搜索引擎
  • ElasticSearch
NipGeihou
2022-04-28
目录

环境搭建

# 通过 Docker 方式安装 ElasticSearch 和 kibana

# 创建网络

用于之后的 es 和 kibana 互联互通

docker network create es-net

# 部署单点 es

docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster" :设置集群名称
  • -e "http.host=0.0.0.0" :监听的地址,可以外网访问
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" :内存大小
  • -e "discovery.type=single-node" :非集群模式
  • -v es-data:/usr/share/elasticsearch/data :挂载逻辑卷,绑定 es 的数据目录
  • -v es-logs:/usr/share/elasticsearch/logs :挂载逻辑卷,绑定 es 的日志目录
  • -v es-plugins:/usr/share/elasticsearch/plugins :挂载逻辑卷,绑定 es 的插件目录
  • --privileged :授予逻辑卷访问权
  • --network es-net :加入一个名为 es-net 的网络中
  • -p 9200:9200 :端口映射配置

在浏览器中输入:http://127.0.0.1:9200 即可看到 elasticsearch 的响应结果

# 部署 kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
  • --network es-net :加入一个名为 es-net 的网络中,与 elasticsearch 在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200" :设置 elasticsearch 的地址,因为 kibana 已经与 elasticsearch 在一个网络,因此可以用容器名直接访问 elasticsearch
  • -p 5601:5601 :端口映射配置

kibana 启动一般比较慢,需要多等待一会,可以通过命令:

docker logs -f kibana

浏览器输入地址访问:http://127.0.0.1:5601,即可看到结果

# 安装 IK 中文分词器

# 在线安装 ik 插件(较慢)

# 进入容器内部
docker exec -it es /bin/bash

# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

#退出
exit
#重启容器
docker restart es

# 离线安装 ik 插件(推荐)

# 查看数据卷目录

安装插件需要知道 elasticsearch 的 plugins 目录位置,而我们用了数据卷挂载,因此需要查看 elasticsearch 的数据卷目录,通过下面命令查看:

docker volume inspect es-plugins

显示结果:

[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

说明 plugins 目录被挂载到了: /var/lib/docker/volumes/es-plugins/_data 这个目录中。

# 解压缩分词器安装包

下面我们需要把课前资料中的 ik 分词器解压缩,重命名为 ik

# 上传到 es 容器的插件数据卷中

也就是 /var/lib/docker/volumes/es-plugins/_data :

# 重启容器

# 4、重启容器
docker restart es
# 查看es日志
docker logs -f es

# 测试

IK 分词器包含两种模式:

  • ik_smart :最少切分
  • ik_max_word :最细切分
# 测试分词器
POST /_analyze
{
  "text": "生活就像海洋,只有意志坚强的人才能到达彼岸",
  "analyzer": "ik_max_word"
}
点击查看

ik_smart:

{
  "tokens" : [
    {
      "token" : "生活",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "就像",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "海洋",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "只有",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "意志坚强",
      "start_offset" : 9,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "的人",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "才能",
      "start_offset" : 15,
      "end_offset" : 17,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "到达",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "彼岸",
      "start_offset" : 19,
      "end_offset" : 21,
      "type" : "CN_WORD",
      "position" : 8
    }
  ]
}

ik_max_word:

{
  "tokens" : [
    {
      "token" : "生活",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "就像",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "海洋",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "只有",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "有意",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "意志坚强",
      "start_offset" : 9,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "意志",
      "start_offset" : 9,
      "end_offset" : 11,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "坚强",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "的人",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "CN_WORD",
      "position" : 8
    },
    {
      "token" : "人才",
      "start_offset" : 14,
      "end_offset" : 16,
      "type" : "CN_WORD",
      "position" : 9
    },
    {
      "token" : "才能",
      "start_offset" : 15,
      "end_offset" : 17,
      "type" : "CN_WORD",
      "position" : 10
    },
    {
      "token" : "能到",
      "start_offset" : 16,
      "end_offset" : 18,
      "type" : "CN_WORD",
      "position" : 11
    },
    {
      "token" : "到达",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 12
    },
    {
      "token" : "彼岸",
      "start_offset" : 19,
      "end_offset" : 21,
      "type" : "CN_WORD",
      "position" : 13
    }
  ]
}

# 词库拓展和停用词典

使用在线方式安装的插件,配置文件在镜像中的 /usr/share/elasticsearch/config/analysis-ik

打开 IK 分词器 config 目录:

在 IKAnalyzer.cfg.xml 配置文件内容添加:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>
上次更新: 2023/05/15, 10:58:20
概述
操作 - Restful

← 概述 操作 - Restful→

最近更新
01
Docker Swarm
04-18
02
安全隧道 - gost
04-17
03
Solana最佳实践
04-16
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式