搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

news2024/12/29 10:06:02

文章目录

  • 安装elasticsearch
  • 1.部署单点es
    • 1.1.创建网络
    • 1.2.加载镜像
    • 1.3.运行
  • 2.部署kibana
    • 2.1.部署
    • 2.2.DevTools
    • 2.3 分词问题(中文不友好)
  • 3.安装IK分词器
    • 3.1.在线安装ik插件(较慢)
    • 3.2.离线安装ik插件(推荐)
      • 1)查看数据卷目录
      • 2)解压缩分词器安装包
      • 3)上传到es容器的插件数据卷中
      • 4)重启容器
      • 5)测试:
    • 3.3 扩展词词典
    • 3.4 停用词词典
  • 4.部署es集群

安装elasticsearch

1.部署单点es

1.1.创建网络

kibana可以帮助我们方便地编写DSL语句,所以还要装kibana

因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:

docker network create es-net

1.2.加载镜像

这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。

课前资料提供了镜像的tar包:

在这里插入图片描述

大家将其上传到虚拟机中,然后运行命令加载即可:

# 导入数据
docker load -i es.tar

同理还有kibana的tar包也需要这样做。

1.3.运行

运行docker命令,部署单点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的网络中 (kibana也会加入,二者才能互相通信)
  • -p 9200:9200:端口映射配置 (9200端口用户访问 9300端口将来各个节点之间互联的端口,目前用不上)

-v 本地卷:容器目录
若本地卷没有,应该会帮你创建,通过docker volume inspect 卷名查看卷信息,其中就有本地目录

# 查看所有数据卷
docker volume ls
# 查看数据卷详细信息卷
docker volume inspect html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上述docker run ...命令执行完毕之后,docker ps就可以查看到对应进程了,浏览器端也可以访问到了
在浏览器中输入:http://192.168.141.100:9200 (注意ip换成自己的) 即可看到elasticsearch的响应结果:

在这里插入图片描述

2.部署kibana

kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。

2.1.部署

运行docker命令,部署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://192.168.141.100:5601,即可看到结果

看到kibana啦~
在这里插入图片描述
点击Explore on my own,然后
在这里插入图片描述

2.2.DevTools

kibana中提供了一个DevTools界面:

在这里插入图片描述
在这里插入图片描述

这个界面中可以编写DSL来操作elasticsearch。并且对DSL语句有自动补全功能。

左边的json格式语句就是DSL查询语句
本质就是发送一个Restful请求到es中

2.3 分词问题(中文不友好)

# 测试分词器
POST /_analyze
{
  "text": "李白讲的java太棒了",
  "analyzer": "english"
}
{
  "tokens" : [
    {
      "token" : "李",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "白",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "讲",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "的",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "java",
      "start_offset" : 4,
      "end_offset" : 8,
      "type" : "<ALPHANUM>",
      "position" : 4
    },
    {
      "token" : "太",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "<IDEOGRAPHIC>",
      "position" : 5
    },
    {
      "token" : "棒",
      "start_offset" : 9,
      "end_offset" : 10,
      "type" : "<IDEOGRAPHIC>",
      "position" : 6
    },
    {
      "token" : "了",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "<IDEOGRAPHIC>",
      "position" : 7
    }
  ]
}

在这里插入图片描述
解析器由‘english’改成‘chinese’或者其他‘standard’也还是一样的,运行结果没变
在这里插入图片描述
在这里插入图片描述

可见:英语分词还是不错的 ‘java’就分成了一个单词。但是中文则是一个字一个字地分地,明显不合适。默认的es无法理解中文含义

3.安装IK分词器

Git地址: https://github.com/medcl/elasticsearch-analysis-ik

可以看到就是专门给ES使用的
在这里插入图片描述

3.1.在线安装ik插件(较慢)

# 进入容器内部
docker exec -it elasticsearch /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 elasticsearch

3.2.离线安装ik插件(推荐)

1)查看数据卷目录

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

docker volume inspect es-plugins

显示结果:

[
    {
        "CreatedAt": "2023-07-15T15:57:30+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 这个目录中。

2)解压缩分词器安装包

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

在这里插入图片描述

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

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

在这里插入图片描述

4)重启容器

# 4、重启容器
docker restart es
# 查看es日志
docker logs  es | grep  analysis-ik

在这里插入图片描述
成功加载,分词器安装完毕

5)测试:

IK分词器包含两种模式:

  • ik_smart:最少切分 (尽可能长地组词,然后不再切分)

  • ik_max_word:最细切分 (分得更多,是词就分出来,字可以重复使用)

POST /_analyze
{
  "text": "胡老师讲的java太棒了",
  "analyzer": "ik_max_word"
}

结果:

{
  "tokens" : [
    {
      "token" : "胡",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "老师",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "讲",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "的",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "java",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "ENGLISH",
      "position" : 4
    },
    {
      "token" : "太棒了",
      "start_offset" : 9,
      "end_offset" : 12,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "太棒",
      "start_offset" : 9,
      "end_offset" : 11,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "了",
      "start_offset" : 11,
      "end_offset" : 12,
      "type" : "CN_CHAR",
      "position" : 7
    }
  ]
}

3.3 扩展词词典

随着互联网的发展,“造词运动”也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:“奥力给”,“永远滴神” 等。

在这里插入图片描述

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

1)打开IK分词器config目录:
/var/lib/docker/volumes/es-plugins/_data/ik/config
在这里插入图片描述

2)在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>
</properties>

3)新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改

其实就是一行行列出每个词即可

全红禅
永远滴神
奥力给

4)重启elasticsearch

docker restart es

# 查看 日志
docker logs -f elasticsearch

日志中会显示已经成功加载ext.dic配置文件

或者耐心等一会儿就像,基本都能正常加载

5)测试效果:

POST /_analyze
{
  "text": "全红禅永远滴神,我的神,奥力给",
  "analyzer": "ik_max_word"
}

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

3.4 停用词词典

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

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

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

其实都配置好了,只是默认两个字典的名称为空

3)在 stopword.dic 添加停用词

该文件默认已经有了,直接在里面添加即可

的
地
了
哦
啊
嘤

4)重启elasticsearch

# 重启服务
docker restart elasticsearch
docker restart kibana

# 查看 日志
docker logs -f elasticsearch

日志中已经成功加载stopword.dic配置文件

5)测试效果:

POST /_analyze
{
  "text": "全红禅永远滴神,我的神,奥力给",
  "analyzer": "ik_max_word"
}

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

{
  "tokens" : [
    {
      "token" : "全红禅",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "永远滴神",
      "start_offset" : 3,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "永远",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "滴",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "神",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
      "token" : "我",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "CN_CHAR",
      "position" : 5
    },
    {
      "token" : "神",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "CN_CHAR",
      "position" : 6
    },
    {
      "token" : "奥力给",
      "start_offset" : 12,
      "end_offset" : 15,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

全红禅永远滴神奥利给。 都能识别为成语了
。不会成为分词了

  • 小结
    在这里插入图片描述

4.部署es集群

部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有4G的内存空间

首先编写一个docker-compose文件,内容如下:

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    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=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

Run docker-compose to bring up the cluster:

docker-compose up

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

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

相关文章

相机图像质量研究(1)Camera成像流程介绍

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

检测到目标X-XSS-Protection响应头缺失

详细描述 HTTP X-XSS-Protection 响应头是 Internet Explorer&#xff0c;Chrome 和 Safari 的一个特性&#xff0c;当检测到跨站脚本攻击 (XSS)时&#xff0c;浏览器将停止加载页面。 X-XSS-Protection响应头的缺失使得目标URL更易遭受跨站脚本攻击。 解决办法 将您的服务…

清华青年AI自强作业hw7:基于Yolo实现位置检测任务

清华青年AI自强作业hw7&#xff1a;基于Yolo实现位置检测任务 简述作业实现相关链接 一起学AI系列博客&#xff1a;目录索引 简述 hw7作业为基于Yolo模型&#xff0c;对PASCAL_VOC_2007数据集的20类物体进行位置探测。数据集为600张图像&#xff0c;因此建议训练迭代次数小于10…

chrome插件”hello-world“开发详细流程以及日志定位

本插件开发文档翻译于Google官方文档Chrome Extension development basics - Chrome Developers 一、插件开发 hello-world插件开发的具体流程如下&#xff1a; 创建目录hello-world&#xff0c; 存放源代码 在此目录中创建一个名为manifest.json的新文件并添加以下代码&…

会声会影2023旗舰版Corel VideoStudio Ultimate 2023 V26.0.0.136整合盘版本

会声会影2023旗舰版Corel VideoStudio Ultimate 2023 V26.0.0.136整合盘版本是一款有趣且直观的视频编辑器&#xff0c;包含高级工具和高级效果&#xff0c;智能功能和最佳性能的高级视频编辑软件&#xff0c;将您最美好的时刻和生活体验变成令人惊叹的电影。 从自定义标题和过…

克服“一支笔,一双手,一道力扣(Leetcode)做一宿”的窘境:我的烦恼和建议

文章目录 每日一句正能量前言原因建议自己相关的经历可能存在的问题根据问题进行分解或建立思维导图分享好用的刷题网站并进行介绍后记 每日一句正能量 想升高&#xff0c;有两样东西&#xff0c;那就是必须作鹰&#xff0c;或者作爬行动物。——巴尔扎克 前言 作为一名计算机…

用Maven的exec插件执行Java程序

Maven的exec插件介绍 利用maven的exec插件可以执行系统和Java程序。 官网资源 exec插件官网&#xff1a;https://www.mojohaus.org/exec-maven-plugin/java-mojo.html Goals exec:exec表示在一个单独的进程内执行系统和Java程序。 exec:java表示在当前的Java虚拟机内执行J…

Jetpack Compose之学习前的准备~

作者&#xff1a;TimeFine 一、为啥学习Compose 学习Compose一开始我是拒绝的&#xff0c;因为习惯改变太大&#xff0c;写xml挺好的为啥要卷Compose&#xff1f; 后来看了郭霖大佬的文章 写给初学者的Jetpack Compose教程&#xff0c;为什么要学习Compose&#xff1f; 觉得大…

MySQL 进阶之王,MySql 性能实战源码 + 笔记 + 项目实战

随着互联网时代的兴起&#xff0c;MySQL 在数据库领域日益显现出举足轻重的地位&#xff0c;它不断扩大的用户群体就是很好的证明。在这样的背景下&#xff0c;需要越来越多的人在知识资源方面为之付出&#xff0c;将自己对 MySQL 数据库的学习过程、运维经验、个人理解等记录下…

强强联手!迅镭激光与安易控达成战略合作,双方携手发展再提速!

7月伊始&#xff0c;安易控中国首个新能源船舶动力电池系统自动化制造基地揭幕仪式在珠海高新区隆重举行&#xff0c;迅镭激光与安易控达成战略合作&#xff0c;双方秉承开放、共赢的合作理念&#xff0c;在船舶动力电池系统领域全面合作&#xff0c;共同为船舶动力系统与储能系…

前端 | (一)前端简介 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;前言&#x1f4da;课程前序知识&#x1f407;两位先驱&#x1f407;计算机基础知识&#x1f407;应用软件架构&#x1f407;浏览器&#x1f407;网页相关概念…

电解质溶液的电传导率

1 概述 在通电、交变磁场等外界作用下&#xff0c;溶液的离子浓度分布变化导致溶液电传导率改变。在电镀、电泳等电化学作业中&#xff0c;需要考虑离子浓度和电传导率之间的相互影响导致的质量问题。 仿真的电镀层厚度分布&#xff08;图源&#xff1a;comsol.com&#xff09;…

【玩转Linux操作】Linux进程(进程基本介绍,父子进程,终止进程,进程树)

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;进程的基本介绍&#x1f354;显示系统执行的进程⭐…

uniapp实现微信小程序自带的分享功能

定义 share.js 文件 export default {data() {return {// 默认的全局分享内容share: {title: 标题,path: /pages/index/index, // 全局分享的路径imageUrl: , // 全局分享的图片(可本地可网络)}}},// 定义全局分享// 1.发送给朋友onShareAppMessage(res) {return {title: this…

剑指offer37.序列化二叉树

先不讲题目&#xff0c;先讲讲序列化和反序列化。 一&#xff0c;序列化与反序列化 在Java中&#xff0c;序列化和反序列化是用于将对象转换为字节流和将字节流转换回对象的过程。序列化是将对象转换为字节流&#xff0c;以便可以在网络上传输或保存到文件中。而反序列化则是…

jb2文件在web端展示之easyJBIG2show

easyJBIG2show an easy JBIG2 file web show github地址 一、背景 最近无意中接触到了一个二维码图片&#xff0c;该图片格式是jb2格式。翻阅资料发现JBIG标准最初在1993年发布&#xff0c;在当时被广泛应用于传真机和文档扫描仪等设备中。JBIG采用了一种自适应二进制编码算…

7.14~7.15学习总结

Java的前置知识学习时间截至了&#xff0c;慌的一批~~。 看看自己学的&#xff0c;再看看要求学的&#xff0c;简直&#xff1a; 现在继续&#xff1a;IO流里面的Commons_IO的用法&#xff1a; public class Main {public static void main(String[]args) throws IOException…

初识Linux——“Linux”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰开了一个全新的专栏啦&#xff0c;这就是Linux&#xff0c;下面&#xff0c;让我们一起进入Linux的世界吧&#xff01;&#xff01;&#xff01; Linux 背景介绍 搭建 Linux 环境 使用 XShell 远程登陆到 Linux Lin…

图片速览 DCN K-means-friendly Spaces: Simultaneous Deep Learning and Clustering

本文使用了一种交替更新网络参数和聚类中心的方法。在网络更新完成之后&#xff0c;对于固定的网络参数和 M&#xff0c;再更新当前样本的分配向量。然后根据新的分配结果如式子3.8更新聚类中心&#xff1a; 注&#xff1a;文中还有问题是否能进行凸优化的部分 CG https…

35 用户虚拟地址空间的 堆栈区间初始化

前言 对于用户程序来说, 堆栈区间 是一个很重要的组成部分, 这部分核心用于支持 函数调用, 参数暂存, 局部变量的存储 等等 我们这里 就来看一下 这块空间 的初始化的相关情况 这里会结合 内核进行调试, 以及 内存中的数据进行分析 堆栈空间的初始化 stack_base, stack_…