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

【Elasticsearch】腾讯云安装Elasticsearch

Elasticsearch

  • 认识Elasticsearch
  • 安装Elasticsearch
  • 安装Kibana
  • 安装IK分词器
    • 分词器的作用是什么?
    • IK分词器有几种模式?
    • IK分词器如何拓展词条?如何停用词条?

认识Elasticsearch

Elasticsearch的官方网站如下
Elasticsearch官网

Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括:

  • Elasticsearch:用于数据存储、计算和搜索
  • Logstash/Beats:用于数据收集
  • Kibana:用于数据可视化
    整套技术栈被称为ELK,经常用来做日志收集、系统监控和状态分析等等:
    在这里插入图片描述

整套技术栈的核心就是用来存储、搜索、计算的Elasticsearch,接下来安装的核心也是Elasticsearch
要安装的内容包含2部分:

  • elasticsearch:存储、搜索和运算
  • kibana:图形化展示

首先Elasticsearch不用多说,是提供核心的数据存储、搜索、分析功能的。
然后是Kibana,Elasticsearch对外提供的是Restful风格的API,任何操作都可以通过发送http请求来完成。不过http请求的方式、路径、还有请求参数的格式都有严格的规范。这些规范我们肯定记不住,因此我们要借助于Kibana这个服务。
Kibana是elastic公司提供的用于操作Elasticsearch的可视化控制台。它的功能非常强大,包括:

  • 对Elasticsearch数据的搜索、展示
  • 对Elasticsearch数据的统计、聚合,并形成图形化报表、图形
  • 对Elasticsearch的集群状态监控
  • 它还提供了一个开发控制台(DevTools),在其中对Elasticsearch的Restful的API接口提供了语法提示

安装Elasticsearch

采用的是elasticsearch的7.12.1版本,由于8以上版本的JavaAPI变化很大,在企业中应用并不广泛,企业中应用较多的还是8以下的版本。
创建网络:因为需要部署kibana容器,因此需要让es和kibana容器互联。

docker network create es-net

拉取镜像:

docker pull elasticsearch:7.12.1

在这里插入图片描述
创建挂在节点

mkdir -p /usr/share/elasticsearch/data     /usr/share/elasticsearch/plugins

在这里插入图片描述

启动命令

docker run -d \
  --name es \
  --restart=always \
  -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

在这里插入图片描述
访问9200验证
ip:9200
在这里插入图片描述

安装Kibana

拉取镜像:

docker pull kibana:7.12.1

在这里插入图片描述
创建挂在节点

mkdir -p  /usr/share/kibana/config /usr/share/kibana/data

在这里插入图片描述

启动命令

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

在这里插入图片描述

测试Kibana是否安装成功
http://IP:5601

安装IK分词器

中文分词往往需要根据语义分析,比较复杂,这就需要用到中文分词器,例如IK分词器。IK分词器是林良益在2006年开源发布的,其采用的正向迭代最细粒度切分算法一直沿用至今。

执行语句

docker exec -it es ./bin/elasticsearch-plugin  install https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.12.1.zip

注:执行时注意版本号,版本应与安装的Elasticsearch版本相同

如果网速较差,也可以选择离线安装。

 https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.12.1.zip

下载文件 上传到 挂载卷下 ik 文件夹下
查看挂载卷

docker volume inspect es-plugins

在这里插入图片描述

docker restart es

IK分词器包含两种模式:

  • ik_smart:智能语义切分
  • ik_max_word:最细粒度切分

我们在Kibana的DevTools上来测试分词器,首先测试Elasticsearch官方提供的标准分词器:

POST /_analyze
{
  "analyzer": "standard",
  "text": "程序员学习java太棒了"
}
{
  "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" : "习",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    },
    {
      "token" : "java",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "<ALPHANUM>",
      "position" : 5
    },
    {
      "token" : "太",
      "start_offset" : 9,
      "end_offset" : 10,
      "type" : "<IDEOGRAPHIC>",
      "position" : 6
    },
    {
      "token" : "棒",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "<IDEOGRAPHIC>",
      "position" : 7
    },
    {
      "token" : "了",
      "start_offset" : 11,
      "end_offset" : 12,
      "type" : "<IDEOGRAPHIC>",
      "position" : 8
    }
  ]
}

可以看到,标准分词器智能1字1词条,无法正确对中文做分词。
我们再测试IK分词器:

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "程序员学习java太棒了"
}
{
  "tokens" : [
    {
      "token" : "程序员",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "学习",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "java",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "ENGLISH",
      "position" : 2
    },
    {
      "token" : "太棒了",
      "start_offset" : 9,
      "end_offset" : 12,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

IK分词器无法对一些新的词汇分词,如“泰裤辣”等,测试一下:

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "程序员泰裤辣"
}
{
  "tokens" : [
    {
      "token" : "程序员",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "泰",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "裤",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "辣",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "CN_CHAR",
      "position" : 3
    }
  ]
}

所以要想正确分词,IK分词器的词库也需要不断的更新,IK分词器提供了扩展词汇的功能
增加词典 进入 挂在卷下 ik/config
也可以 直接在本地修改好后直接上传到 服务器 (推荐)
修改文件 IKAnalyzer.cfg.xml
在这里插入图片描述
然后修改 vim ext.dic
在这里插入图片描述
然后重启 es
再次请求es得

{
  "tokens" : [
    {
      "token" : "程序员",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "泰裤辣",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

分词器的作用是什么?

  • 创建倒排索引时,对文档分词
  • 用户搜索时,对输入的内容分词

IK分词器有几种模式?

  • ik_smart:智能切分,粗粒度
  • ik_max_word:最细切分,细粒度

IK分词器如何拓展词条?如何停用词条?

  • 利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典
  • 在词典中添加拓展词条或者停用词条

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

相关文章:

  • 探秘Shortest与Stagehand:开启高效测试与自动化新篇
  • AI Agent:AutoGPT的使用方法
  • 使用tritonserver完成clip-vit-large-patch14图像特征提取模型的工程化。
  • 【0x04】HCI_Connection_Request事件详解
  • Apache Tomcat文件包含漏洞复现(详细教程)
  • C++经典例题
  • C#集合操作优化:高效实现批量添加与删除
  • vue3+uniapp开发鸿蒙初体验
  • 【图像处理】——掩码
  • C#防止重复提交
  • Unity中两个UGUI物体的锚点和中心点设置成不一样的,然后怎么使两个物体的位置一样?
  • vsftpd虚拟用户部署
  • MATLAB中characterListPattern函数用法
  • 【爱上C++】vector用法详解
  • 案例分析一
  • MySQL新建和删除普通用户
  • Mac苹果电脑 怎么用word文档和Excel表格?
  • 如何使用Python爬虫获取微店商品详情:代码示例与实践指南
  • 《C++ primer plus》第六版课后编程题-第04章
  • 【王树森搜素引擎技术】概要03:搜索引擎的评价指标
  • 【ESP32】ESP32连接JY61P并通过WIFI发送给电脑
  • 软件测试 —— Postman(全局变量和环境变量,请求前置脚本,关联)
  • android studio 工具.gradle目录修改
  • 【Go语言圣经】第三节:基础数据类型
  • No. 34 笔记 | Python知识架构与数据类型相关内容 | 实操
  • postgresql清理wal日志