大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

embedded/2024/10/22 7:19:39/

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • ES-head 插件配置使用
  • Kibana 插件配置使用

在这里插入图片描述

索引操作

创建索引库

Elasticsearch采用Rest风格API,因此其API就是一次HTTP请求,你可以用任何工具来发起HTTP请求。
语法:

PUT /索引名称
{"settings": {"属性名": "属性值"}
}

settings:就是索引库设置,其中可以索引库的各种属性,比如分片数、副本数等。目前我们不设置,先默认即可。
示例:

PUT /wzkicu-index

执行结果如下图:
在这里插入图片描述

判断索引是否存在

单个索引

语法:

GET /索引名称

示例:

GET /wzkicu-index

执行结果如下图所示:
在这里插入图片描述

多个索引

语法:

GET /索引名称1,2,3,4,5...

示例:

GET /wzkicu-index,wzkicu,wzk

执行结果如下图所示:(这里有不存在的索引,所以404了)
在这里插入图片描述

所有索引

方式1:

GET _all

执行结果如下图所示:
在这里插入图片描述
方式2:

GET /_cat/indices?v

执行结果如下图所示:
在这里插入图片描述
这里的health列,表示:

  • 绿色:索引的所有分片都正常分配
  • 黄色:至少有一个副本没有得到正确的分配
  • 红色:至少有一个主分片没有得到正常的分配

打开索引

语法:

POST /索引名称/_open

示例:

POST /wzkicu-index/_open

执行结果如下图:
在这里插入图片描述

关闭索引

语法:

POST /索引名称/_close

示例:

POST /wzkicu-index/_close

执行结果如下图:
在这里插入图片描述

删除索引

语法:

DELETE /索引名称1,2,3,4,5...

示例:

DELETE /wzkicu-index

执行结果如下图所示:
在这里插入图片描述

IK分词器

下载项目

官方地址在这里,是GitHub开源的项目,安装方式很多,我这里就直接用官方的方式安装了:

https://github.com/infinilabs/analysis-ik/releases/tag/Latest

页面是这样的:
在这里插入图片描述

安装插件

cd /opt/servers/elasticsearch-7.3.0/
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.3.0

执行结果如下图所示,我们需要重启ES:
在这里插入图片描述

重启ES

重启过程,启动完毕:
在这里插入图片描述

分词测试

IK分词器两种分词模式:

  • ik_max_word 模式 (最常用)(会将文本最细粒度的拆分)
  • ik_smart 模式 (会做最粗粒度的拆分)

暂时不细追究语法,先学习测试,再后续研究。

ik_max_word

POST _analyze
{"analyzer": "ik_max_word","text": "山东省青岛市黄岛区"
}

我们的到的结果是:

{"tokens": [{"token": "山东省","start_offset": 0,"end_offset": 3,"type": "CN_WORD","position": 0},{"token": "山东","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 1},{"token": "省","start_offset": 2,"end_offset": 3,"type": "CN_CHAR","position": 2},{"token": "青岛市","start_offset": 3,"end_offset": 6,"type": "CN_WORD","position": 3},{"token": "青岛","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 4},{"token": "市","start_offset": 5,"end_offset": 6,"type": "CN_CHAR","position": 5},{"token": "黄岛区","start_offset": 6,"end_offset": 9,"type": "CN_WORD","position": 6},{"token": "黄岛","start_offset": 6,"end_offset": 8,"type": "CN_WORD","position": 7},{"token": "区","start_offset": 8,"end_offset": 9,"type": "CN_CHAR","position": 8}]
}

执行的结果如下图所示:
在这里插入图片描述

ik_smart

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": 6,"type": "CN_WORD","position": 1},{"token": "黄岛区","start_offset": 6,"end_offset": 9,"type": "CN_WORD","position": 2}]
}

执行的结果如下图所示:
在这里插入图片描述

提出问题

在实际环境中,有很多时候并不能够准确的理解我们断词断句,有时候有些词我们想要它拆分,有些词我们希望它不拆分。
那我们怎么办呢?

词典使用

扩展词

不进行分词,告诉引擎这是一个词。

停用词

有些词在文本中出现的频率非常高,但对本文的语义会产生很大的影响,例如:呢、了、啊等等,英语中也有类似于 a 、the、of 等等。这样的词称为停用词。
停用词经常会过滤掉,不会被索引,在检索过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。
停用词可以加快索引的速度、减少索引库的大小。

扩展词、停用词应该统一维护,避免集群中多台导致节点各自维护自己的一份。这里我们计划使用Web的方式,将dict词库共享给分词器等。

分词服务

配置Web
我这里使用 Nginx,你也可以使用 Tomcat:

apt install nginx

安装过程如下图所示:
在这里插入图片描述
访问页面:http://h121.wzk.icu,可以看到Nginx顺利运行:
在这里插入图片描述
编写dict内容:

vim /var/www/html/stop_dict.dic

向其中写入的内容如下:

的
了
啊
呢

同理,我们写入 ext_dict.dic:

vim /var/www/html/ext_dict.dic

我们访问对应的页面,可以拿到对应的Web文件:
在这里插入图片描述

配置分词器

# 这里看自己的版本 我选了好几个
cd /opt/servers/elasticsearch-8.15.0/plugins/analysis-ik
mkdir config
vim 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"></entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">http://h121.wzk.icu/ext_dict.dic</entry><!--用户可以在这里配置远程扩展停止词字典--><entry key="remote_ext_stopwords">http://h121.wzk.icu/stop_dict.dic</entry>
</properties>

对应的截图如下所示:
在这里插入图片描述

重启服务

重启ES服务,测试效果。


http://www.ppmy.cn/embedded/129503.html

相关文章

ORB -SLAM2 ---- Tracking::Tracking和GrabImageStereo

文章目录 一、Tracking::Tracking1. 函数讲解&#xff0c;2. 函数源码 一、GrabImageStereo()1. 函数讲解2. 函数源码 三、 学习方法&#xff08;路线&#xff09;四、总结 一、Tracking::Tracking 1. 函数讲解&#xff0c; 这是Tracking中的构造函数&#xff0c;此函数的主要…

一起搭WPF架构之livechart的MVVM使用介绍

一起搭WPF架构之livechart使用介绍 前言ModelViewModelView界面设计界面后端 效果总结 前言 简单的架构搭建已经快接近尾声了&#xff0c;考虑设计使用图表的形式将SQLite数据库中的数据展示出来。前期已经介绍了livechart的安装&#xff0c;今天就详细介绍一下livechart的使用…

【Python-AI篇】数据结构和算法

1. 算法概念 1.1 什么是数据结构 存储&#xff0c;组织数据的方式 1.2 什么是算法 实现业务目的的各种方法和思路算法是独立的存在&#xff0c;只是思想&#xff0c;不依附于代码和程序&#xff0c;可以使用不同语言实现&#xff08;java&#xff0c;python&#xff0c;c&a…

人工智能技术的应用前景及其对生活和工作方式的影响

人工智能技术的应用前景及其对生活和工作方式的影响 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;其在各个领域的应用正日益深入&#xff0c;深刻改变着我们的生活和工作方式。本文将系统地探讨人工智能的历史、现状、未来应用前景&#xff0c;以及其对个…

微信小程序实现canvas电子签名

一、先看效果 小程序canvas电子签名 二、文档 微信小程序canvas 组件文档 微信小程序canvas API文档 H5Canvas文档 三、分析 1、初始话Canvas容器 2、Canvas触摸事件&#xff0c;bindtouchstart&#xff08;手指触摸动作开始&#xff09;、bindtouchmove&#xff08;手指触摸…

【ARM】ARM架构参考手册_Part A CPU(1)

目录​​​​​​​ 1.1 关于ARM架构 1.1.1 ARM寄存器 1.1.2 异常 1.1.3 状态寄存器 1.2 ARM指令集 1.2.1 分支指令 1.2.2 数据处理指令 算术/逻辑指令 比较指令 乘法指令 计算前导零指令 1.2.3 状态寄存器传送指令 1.2.4 加载和存储指令 加载和存储寄存器 加载…

c++就业 创建新的设计模式

virtual自然生成虚函数表&#xff08;一维数组记录了虚函数地址 通过偏移可以调相对应的方法&#xff09; vp 编译的时候地址自然会赋值给相对应的对象 如何体现多态 没有虚函数重写 那么就是早绑定 就比如subject会转换成base类型 p指向base对象 有虚函数就是晚绑定 p指向subj…

LlamaIndex核心概念查询管道(Query Pipelines)简介

LlamaIndex 查询管道简介 概述 LlamaIndex提供了一个声明性查询API&#xff0c;允许您将不同的模块链接在一起&#xff0c;以便在数据上编排从简单到高级的工作流。 这是以QueryPipeline抽象为中心的。装入各种模块&#xff08;从llm到提示符&#xff0c;再到检索器&#xf…