ElasticSearch - 基于 docker 部署 es、kibana,配置中文分词器、扩展词词典、停用词词典

news2024/11/25 12:47:58

目录

一、ElasticSearch 部署

1.1、创建网络

1.2、加载镜像

1.3、运行

1.4、检查是否部署成功

二、部署 Kibana

2.1、加载镜像

2.2、运行

三、部署 IK 分词器

3.1、查看数据卷目录

3.2、上传分词器

3.3、重启容器

3.4、测试

3.4、扩展词词典

3.5、停用词词典


一、ElasticSearch 部署


1.1、创建网络

这里为了 es 和 将来要下载的 kibana 进行互联,因此需要我们去创建一个网络.

Ps:这里也可以使用 docker-compose 一键互联,但是考虑到未来可能不会使用 kibana(可替代组件,前面的章节讲过),只需要 es,所以这里我们还是单独部署.

docker network create es-net

1.2、加载镜像

这里我们使用 es 的 7.12.1 版本的镜像,体积比较大,接近 1G,大家可以自己去 pull 下来,也可以去找一些现有的资源(因为太大了,我上传不了,bibana 也是如此).

上传完成以后,去加载镜像即可.

docker load -i es.tar

 

1.3、运行

部署单点 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 表示配置环境变量,这里环境变量有两个.
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小(es 底层是 Java 实现的,所以这里是配置 jvm 的堆内存大小),值得注意的是,这里 512 已经是能配置的最小内存了,不能更小,否则回出现内存不足的情况.
  • -e "discovery.type=single-node"`:非集群模式(single node 就是单个节点的意思)
  • -v es-data:/usr/share/elasticsearch/data`:挂载数据卷,绑定es的数据目录
  • -v es-plugins:/usr/share/elasticsearch/plugins`:挂载数据卷,绑定es的插件目录(将来作拓展,就要在这里存东西)
  • --privileged`:授予数据卷访问权
  • --network es-net` :加入一个名为es-net的网络中
  • -p 9200:9200: 这里是 http 协议端口,供我们访问.
  • -p 9300:9300:这里是 es 容器各个节点之间的互联端口.(这个端口现在用不到,不暴露也没关系,只是后面部署集群的时候,还得打开).

如果要设置集群,可以如下配置:

  • -e "cluster.name=es-docker-cluster"`:设置集群名称

运行镜像

1.4、检查是否部署成功

可以先通过 docker ps 命令,看一下是不是启动成功了.

接下来,打开浏览器,输入 http://你的云服务ip:9200 即可(这里我就不暴露 ip了,孩子吃了不少教训,害怕黑客攻击了...)

Ps:这里别忘了开 9200 端口的防火墙.

如果看到如下界面,就说明 ElasticSearch 部署完成~

二、部署 Kibana


这里为什么还要安装 kibana 呢?因为 kibana 中提供了一个 dev tools 工具,可以让我们非常方便的编写 es  中 DSL 语句.

2.1、加载镜像

这里的镜像同样不建议大家去 pull,可以去网上找找其他的资源,但是值得注意的是,kibana 的版本要和 es 匹配才行.

docker load -i kibana.tar

2.2、运行

运行以下命令,运行镜像

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://你的云服务器 ip:5601 既可看到结果.

这里专门提供了一个工具,用来编写 DSL 代码,来操作 es,并且还有 DSl 语句自动补全功能.

三、部署 IK 分词器


前面章节我们讲到,建立倒排索引需要对用户输入的内容进行分词处理(比如用户输入“华为手机”,会分成 “华为”和“手机”),但是由于 es 默认的分词器是不支持中文分词的,因此这里需要我们去安装 IK 分词器.

3.1、查看数据卷目录

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

docker volume inspect es-plugins

3.2、上传分词器

这里我们可以在网上找 ik 分词器的压缩包,下载下来解压,命名为 ik.

然后上传到 es 容器的插件数据卷中.

如果直接上传文件夹失败,那么还是压缩成 zip 文件,上传,然后通过 unzip 进行解压.

3.3、重启容器

使用以下命令重启容器

docker restart es

3.4、测试

IK 分词器,包含两种模式:

  • ik_smart:最少切分,例如 “世界上” 这个内容,首先就是看这个整体是否是一个词,如果是就将他作为一个词条,然后这个词就拆分完成了;如果不是一个词,才继续拆分.
  • ik_max_word:最细切分,例如 “世界上” 这个内容,首先就看这个整体是否是一个词,如果是就将他作为一个词条,然后在看是否能继续切分,如果可以就继续切分,找到新词条.

以下我们可以看一下使用 ik_smart 对 "java是世界上最好的语言进行分词".

ik_max_word 分词输入:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "java是世界上最好的语言"
}

输出如下:

{
  "tokens" : [
    {
      "token" : "java",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "世界上",
      "start_offset" : 5,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "世界",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "上",
      "start_offset" : 7,
      "end_offset" : 8,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
      "token" : "最好",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "的",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "CN_CHAR",
      "position" : 6
    },
    {
      "token" : "语言",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

ik_smart 分词输入:

GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "java是世界上最好的语言"
}

输出:

{
  "tokens" : [
    {
      "token" : "java",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "世界上",
      "start_offset" : 5,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "最好",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "的",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
      "token" : "语言",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 5
    }
  ]
}

3.4、扩展词词典

随着互联网的不断发展,也出现了很多新的词语,在原有的词汇列表中不存在,比如:“鸡你太美”,“奥里给”.......

所以我们的词汇也需要不断更新,IK分词器也提供了扩展词汇的功能.

a)在 es 的插件数据卷目录下,进入 ik 文件夹,接着进入 config 目录.

找到如下文件

b)通过 vim 打开 IKAnalyzer.vfg.xml 配置文件,添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典-->

        <!-- 例如如下添加 ext.dic 文件 -->
        <entry key="ext_dict">ext.dic</entry>
</properties>

c)新建一个 ext.dic,添加需要的词汇.

Ps:当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑

d)重启 es

docker restart es

e)测试效果

ik_max_word 分词输入:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "听过鸡你太美和奥里给吗?"
}

输出:

{
  "tokens" : [
    {
      "token" : "听过",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "鸡你太美",
      "start_offset" : 2,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "太美",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "和",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "奥里给",
      "start_offset" : 7,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "吗",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "CN_CHAR",
      "position" : 5
    }
  ]
}

3.5、停用词词典

在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:关于宗教、政治等敏感词语,那么我们在搜索时也应该忽略当前词汇。

IK分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。

a)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>

b)在 stopword.dic 中添加停用词.

可以看到这里,原本已经有一些停用的词(一些介词...没必要创建索引)

这里我们添加 “小黑子”,如下

c)重启 es

docker restart es

d)测试

可以看出,并没有分出 小黑子 这个词条

 

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

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

相关文章

贝锐蒲公英异地组网:无需专线,也能解决无公网固定IP问题

为了简化部署、运维实现更高的易用性&#xff0c;或是满足用户的特定需求&#xff0c;基于SD-WAN全自研的贝锐蒲公英异地组网拥有众多实用功能。这些功能涵盖网络、用户交互等诸多方面&#xff0c;包括&#xff1a;旁路组网模式、自定义网络出口/虚拟IP/DNS域名解析、WebVPN、企…

使用光纤激光切割机等激光切割设备时的一些小诀窍

光纤激光切割机极大地提高了钣金加工行业切割效果和生产效率。然而在我们对客户的回访调查中&#xff0c;发现客户普遍存在着对光纤激光切割机设备的保养维护意识不足的问题&#xff0c;这严重影响了设备的正常使用和使用寿命。 虽然激光切割机有日常的保养&#xff0c;但是也需…

leetcode215题快排

关于快排的两种写法为什么一个超时 一个很快的问题记录 快的写法&#xff1a; 超时的写法&#xff1a; 查看了一下超时的数据&#xff0c;是有很多相同的数字组成&#xff0c;个人觉得是因为超时的写法&#xff0c;再遇到相同的数字的时候&#xff0c;直接或者–&#xff0…

premiere 图片突出滑块效果

1 导入图片 2 复制图片 3 创建序列 4 序列 导入 图片和复制的图片 两个 v轨道 5 旧版标题 窗口 -> 基础图像 (查看是否勾选) 6 v 轨道 选择 复制的图片 -> 效果 -> 基础图形 -> 新建 -> 矩形 -> 变形 旋转 7 效果 -> 搜-> 轨道遮罩键 -> 拖入…

盛元广通畜牧实验室信息管理系统(LIMS)

盛元广通通过构建物联网畜牧实验室信息管理系统LIMS&#xff0c;将畜牧养殖生命周期生产业务一体化、降本增效、管理透明、柔性把握检测业务管理流程、从源头质量把关、多维度动物管理看板、成本核算自动化、移动化场景同步高效协同。帮助实验室及早识别和应对潜在的疾病威胁&a…

静态路由+BFD实例

项目拓扑与项目需求 项目需求 ① 主链路为电信&#xff0c;电信链路出故障时&#xff0c;业务数据流量切换到联通链路 实验步骤 步骤1&#xff1a;设备重命名以及IP地址的配置 设备 接口编号 IP地址 AR1 G0/0/0 10.0.13.1/24 G0/0/1 10.0.14.1/24 AR2 G0/0/0 10.0…

基于SpringBoot的古典舞在线交流平台的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 系统主界面 用户注册界面 论坛交流界面 课程详情界面 购物车界面 我的订单界面 管理员登录界面 会员用户管理界面 服饰管理界面 课程管理界面 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着互联网技术…

分布式操作系统

分布式操作系统属于多机操作系统&#xff0c;能够统一一套计算机集群&#xff0c;相比单机系统&#xff0c;分布式操作系统在管理计算机集群方面要简单很多。各种分布式的基础功能&#xff0c;都集中到分布式操作系统来实现&#xff0c;而不是单机系统的应用软件来实现&#xf…

Emmabuntüs Debian Edition 5 正式发布

导读来自 Emmabunts Collective 的 Patrick d’Emmabunts 近日向 9to5Linux.com 通报了 Emmabunts Debian Edition 5 1.00 的发布和全面可用性&#xff0c;该版本是用于翻新旧电脑的 GNU/Linux 发行版的最新稳定版本。 Emmabunts Debian Edition 5是在Emmabunts Debian Edition…

【模拟实现C语言库函数】string.h中的内存操作函数

本篇文章目录 相关文章1. 模拟 memcpy 内存拷贝2. 模拟 memmove 内存移动 相关文章 【C语言】数据在内存中是以什么顺序存储的&#xff1f;【C语言】整数在内存中如何存储&#xff1f;又是如何进行计算使用的&#xff1f;【C语言】利用void*进行泛型编程【C语言】4.指针类型部…

postgresql pgsql 连接池 pgBouncer(详细)

适用连接池可以有效的降低反复连接造成的损耗 2023.9.28更新&#xff0c;演示&#xff1a;1.20.1版本 没有安装pgsql的可以参考&#xff1a;pgsql编译安装 一、编译安装 包安装更简单&#xff0c;就是不能选版本 1.pgBouncer下载地址 链接&#xff1a;github项目地址 链接&a…

2023软件测试面试八股文大全(含答案)

1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢 C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xff0c…

java一体化智慧工地信息管理平台源码 智慧工地APP源码

智慧工地云平台是专为建筑施工领域所打造的一体化信息管理平台。通过大数据、云计算、人工智能、物联网和移动互联网等高科技技术手段&#xff0c;将施工区域各系统数据汇总&#xff0c;建立可视化数字工地。同时&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0…

探索ClickHouse——连接Kafka和Clickhouse

安装Kafka 新增用户 sudo adduser kafka sudo adduser kafka sudo su -l kafka安装JDK sudo apt-get install openjdk-8-jre下载解压kafka 可以从https://downloads.apache.org/kafka/下找到希望安装的版本。需要注意的是&#xff0c;不要下载路径包含src的包&#xff0c;否…

QQ聊天记录文件怎么恢复?这3个方法亲测有效

QQ为用户提供了聊天、语音、视频、在线游戏、社交分享等丰富的功能&#xff0c;满足了用户的各种通讯以及娱乐需求。无论是现在还是过去&#xff0c;QQ仍然在我们的生活中扮演着重要的角色。 如果在使用QQ的过程中&#xff0c;发现文件过期或者被删除了该怎么办&#xff1f;qq…

480439-15-4,一种具有荧光单体的pH敏感性染料Fluorescein O-methacrylate

产品简介&#xff1a;荧光素O-甲基丙烯酸酯是一种具有荧光单体的pH敏感性染料。它可以通过490 nm的激发光谱和520 nm的发射光谱进行表征。它具有荧光素&#xff0c;其是一种负电荷最少的指示剂。它的特性包括生物相容性、无毒性&#xff0c;以及在水溶液中的良好分散性。 CAS号…

Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 1(Pinia)

Pinia状态管理 在 Vue3 中项目中组件之间传递数据时&#xff0c;可以使用 Props 和 Emit&#xff0c;还可以使用 Provide/Inject 来代替 Props 和 Emit。Props 和 Emit 只能在具有父子关系的组件之间传递数据&#xff0c;所以层级越深&#xff0c;过程就越复杂。为了解决此类问…

brew 安装MySQL 5.7

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

【云原生】k8s集群调度

目录 一、调度约束 1.1List-Watch工作机制 1.2调度过程 二、指定调度节点 2.1修改成 nodeSelector 调度方式 三、亲和性 &#xff08;1&#xff09;节点亲和性 &#xff08;2&#xff09;Pod 亲和性 3.1 键值运算关系 四、污点(Taint) 和 容忍(Tolerations) 4.1污点(…

搭建 Prometheus 对服务进行监控

前言&#xff1a; 服务平时没啥问题&#xff0c;一到过节我放假&#xff0c;它也想放假&#xff0c;所以只能找个监工看着了。当前市面上主流的监工方案是 zabbix 和 prometheus&#xff0c;没有优劣之分&#xff0c;只是适用场景略有区别。我这边的需求就主要是监控服务的端口…