ElasticSearch-IK分词器(elasticsearch插件)安装配置和ElasticSearch的Rest命令测试

四、IK分词器(elasticsearch插件)

IK分词器:中文分词器

分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一一个匹配操作,默认的中文分词是将每个字看成一个词不使用用IK分词器的情况下),比如“我爱狂神”会被分为”我”,”爱”,”狂”,”神” ,这显然是不符合要求的,所以我们需要安装中文分词器ik来解决这个问题。

IK提供了两个分词算法: ik_smartik_max_word ,其中ik_smart最少切分, ik_max_word最细粒度划分!

1、下载

版本要与ElasticSearch版本对应

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

2、安装

ik文件夹是自己创建的

加压即可(但是我们需要解压到ElasticSearch的plugins目录ik文件夹下)
在这里插入图片描述

在这里插入图片描述

3、重启ElasticSearch

加载了IK分词器

在这里插入图片描述

在这里插入图片描述

4、使用 ElasticSearch安装补录/bin/elasticsearch-plugin 可以查看插件

在这里插入图片描述

elasticsearch-plugin list

在这里插入图片描述

5、使用kibana测试

在这里插入图片描述

ik_smart:最少切分

在这里插入图片描述

ik_max_word:最细粒度划分(穷尽词库的可能)

在这里插入图片描述

从上面看,感觉分词都比较正常,但是大多数,分词都满足不了我们的想法,如下例

在这里插入图片描述

那么,我们需要手动将该词添加到分词器的词典当中

6、添加自定义的词添加到扩展字典中

elasticsearch目录/plugins/ik/config/IKAnalyzer.cfg.xml

打开 IKAnalyzer.cfg.xml 文件,扩展字典

在这里插入图片描述

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

创建字典文件,添加字典内容

在这里插入图片描述

在这里插入图片描述

重启ElasticSearch,再次使用kibana测试

在这里插入图片描述

分词器生效

在这里插入图片描述

在这里插入图片描述

五、Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁更有层次更易于实现缓存等机制。

1、基本Rest命令说明:

methodurl地址描述
PUT(创建,修改)localhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POST(创建)localhost:9200/索引名称/类型名称创建文档(随机文档id)
POST(修改)localhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETE(删除)localhost:9200/索引名称/类型名称/文档id删除文档
GET(查询)localhost:9200/索引名称/类型名称/文档id查询文档通过文档ID
POST(查询)localhost:9200/索引名称/类型名称/文档id/_search查询所有数据

2、测试

1)创建一个索引,添加

PUT /test1/type1/1
{"name" : "LBJ","age" : 23
}

在这里插入图片描述

在这里插入图片描述

2)字段数据类型

  • 字符串类型
    • text、keyword
      • text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
      • keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  • 数值型
    • long、Integer、short、byte、double、float、half floatscaled float
  • 日期类型
    • date
  • te布尔类型
    • boolean
  • 二进制类型
    • binary
  • 等等…

3)指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /test2
{"mappings": {"properties": {"name": {"type": "text"},"age":{"type": "long"},"birthday":{"type": "date"}}}
}

在这里插入图片描述

4)获取3建立的规则

GET test2

在这里插入图片描述

5)获取默认信息

_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替

PUT /test3/_doc/1
{"name": "流柚","age": 18,"birth": "1999-10-10"
}
GET test3

在这里插入图片描述

如果自己的文档字段没有被指定,那么ElasticSearch就会给我们默认配置字段类型

扩展:通过get _cat/ 可以获取ElasticSearch的当前的很多信息!

GET _cat/indices
GET _cat/aliases
GET _cat/allocation
GET _cat/count
GET _cat/fielddata
GET _cat/health
GET _cat/indices
GET _cat/master
GET _cat/nodeattrs
GET _cat/nodes
GET _cat/pending_tasks
GET _cat/plugins
GET _cat/recovery
GET _cat/repositories
GET _cat/segments
GET _cat/shards
GET _cat/snapshots
GET _cat/tasks
GET _cat/templates
GET _cat/thread_pool

6)修改

两种方案

①旧的(使用put覆盖原来的值)

  • 版本+1(_version)
  • 但是如果漏掉某个字段没有写,那么更新是没有写的字段 ,会消失
PUT /test3/_doc/1
{"name" : "流柚是我的大哥","age" : 18,"birth" : "1999-10-10"
}
GET /test3/_doc/1
// 修改会有字段丢失
PUT /test3/_doc/1
{"name" : "流柚"
}
GET /test3/_doc/1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

②新的(使用post的update)

  • version不会改变
  • 需要注意doc
  • 不会丢失字段
POST /test3/_doc/1/_update
{"doc":{"name" : "post修改,version不会加一","age" : 2}
}
GET /test3/_doc/1

在这里插入图片描述

在这里插入图片描述

7)删除

GET /test1
DELETE /test1

在这里插入图片描述

8)查询(简单条件)

GET /test3/_doc/_search?q=name:流柚

在这里插入图片描述

9)复杂查询

test3索引中的内容

在这里插入图片描述

①查询匹配
  • match:匹配(会使用分词器解析(先分析文档,然后进行查询))
  • _source:过滤字段
  • sort:排序
  • formsize 分页
  // 查询匹配GET /blog/user/_search{"query":{"match":{"name":"流"}},"_source": ["name","desc"],"sort": [{"age": {"order": "asc"}}],"from": 0,"size": 1}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

②多条件查询(bool)
  • must 相当于 and
  • should 相当于 or
  • must_not 相当于 not (... and ...)
  • filter 过滤
/// bool 多条件查询
 must <==> and
 should <==> or
 must_not <==> not (... and ...)
 filter数据过滤
 boost
 minimum_should_match
GET /blog/user/_search
{"query":{"bool": {"must": [{"match":{"age":3}},{"match": {"name": "流"}}],"filter": {"range": {"age": {"gte": 1,"lte": 3}}}}}
}

在这里插入图片描述

在这里插入图片描述

③匹配数组
  • 貌似不能与其它字段一起使用
  • 可以多关键字查(空格隔开)— 匹配字段也是符合的
  • match 会使用分词器解析(先分析文档,然后进行查询)
  • 搜词
// 匹配数组 貌似不能与其它字段一起使用
// 可以多关键字查(空格隔开)
// match 会使用分词器解析(先分析文档,然后进行查询)
GET /test3/user/_search
{"query":{"match":{"desc":"詹 库 杜"}}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

④精确查询
  • term 直接通过 倒排索引 指定词条查询
  • 适合查询 number、date、keyword ,不适合text
// 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)
// term 直接通过 倒排索引 指定的词条 进行精确查找的
GET /blog/user/_search
{"query":{"term":{"desc":"年 "}}
}

在这里插入图片描述

有空格

在这里插入图片描述

没有空格

在这里插入图片描述

⑤text和keyword
  • text:
    • 支持分词全文检索、支持模糊、精确查询,不支持聚合,排序操作;
    • text类型的最大支持的字符长度无限制,适合大字段存储;
  • keyword:
    • 不进行分词直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
    • keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果
// 测试keyword和text是否支持分词
// 设置索引类型
PUT /test
{"mappings": {"properties": {"text":{"type":"text"},"keyword":{"type":"keyword"}}}
}
// 设置字段数据
PUT /test/_doc/1
{"text":"测试keyword和text是否支持分词","keyword":"测试keyword和text是否支持分词"
}
// text 支持分词
// keyword 不支持分词
GET /test/_doc/_search
{"query":{"match":{"text":"测试"}}
}// 查的到
GET /test/_doc/_search
{"query":{"match":{"keyword":"测试"}}
}// 查不到,必须是 "测试keyword和text是否支持分词" 才能查到
GET _analyze
{"analyzer": "keyword","text": ["测试liu"]
}// 不会分词,即 测试liu
GET _analyze
{"analyzer": "standard","text": ["测试liu"]
}// 分为 测 试 liu
GET _analyze
{"analyzer":"ik_max_word","text": ["测试liu"]
}// 分为 测试 liu

在这里插入图片描述

text支持分词

在这里插入图片描述

keyword不支持分词

在这里插入图片描述

完整

在这里插入图片描述

在这里插入图片描述

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

⑥高亮查询
/// 高亮查询
GET blog/user/_search
{"query": {"match": {"name":"流"}},"highlight": {"fields": {"name": {}}}
}
// 自定义前缀和后缀
GET blog/user/_search
{"query": {"match": {"name":"流"}},"highlight": {"pre_tags": "<p class='key' style='color:red'>","post_tags": "</p>", "fields": {"name": {}}}
}

在这里插入图片描述

高亮

在这里插入图片描述

自定义高亮

在这里插入图片描述

ElasticSearch-IK分词器(elasticsearch插件)安装配置和ElasticSearch的Rest命令测试 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

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

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

相关文章

Pointnet++改进卷积系列:全网首发ODConv2全维动态卷积 |即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入ODConv2全维动态卷积,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3…

ElasticSearch概述及Window和Linux环境下安装

一、ElasticSearch 1、ElasticSearch概述 ES&#xff08;Elasticsearch&#xff09;是一个基于开放源代码的分布式搜索引擎&#xff0c;用于快速和灵活地搜索和分析大量数据。它是构建在Apache Lucene之上的&#xff0c;通过提供一个简单而强大的RESTful API来实现全文搜索、…

麒麟系统—— openKylin 安装 Nginx

麒麟系统—— openKylin 安装 Nginx 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载 nginx三、解压与运行解压检查与编译安装编译运行 四、配置加入到服务中加入环境变量nginx 配置文件 五、常用命令 Nginx 是一款高性能的 HTTP 和反向代理服务器&#xff0c…

Java编程练习之类的封装2

1.封装一个股票&#xff08;Stock&#xff09;类&#xff0c;大盘名称为上证A股&#xff0c;前一日的收盘点是2844.70点&#xff0c;设置新的当前值如2910.02点&#xff0c;控制台既要显示以上信息&#xff0c;又要显示涨跌幅度以及点数变化的百分比。运行效果如下&#xff1a;…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式&#xff1a;Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节&#xff0c;笔者经过半年北漂&#xff0c;…

Linux系统——防火墙

一、防火墙的认识 引言 安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

企业如何对u盘管控,进行U盘管理?公司电脑禁用U盘的方法

随着信息技术的飞速发展&#xff0c;U盘等移动存储设备已成为企业数据传输和存储的重要工具。然而&#xff0c;U盘的滥用和误操作也带来了巨大的安全隐患&#xff0c;如数据泄露、病毒传播等。 因此&#xff0c;对企业而言&#xff0c;如何有效管控U盘的使用&#xff0c;确保数…

网络安全简介

网络安全&#xff1a; ​ 网络安全攻击分为被动攻击和主动攻击。 1. 被动攻击&#xff1a;是指攻击者从网络上窃取了他人的通信内容&#xff0c;通常把这类的攻击称为截获&#xff0c;被动攻击只要有2种形式&#xff1a;消息内容泄漏攻击和流量分析攻击。由于攻击者没…

Android 8.1 输入框返回键改为删除功能

Android 8.1 输入框返回键改为删除功能 最近接到客户反馈&#xff0c;想要实现在输入框返回键改为删除功能&#xff0c;具体修改参照如下&#xff1a; /frameworks/base/core/java/android/view/View.java public boolean dispatchKeyEvent(KeyEvent event) {if (mInputEvent…

Pymysql将爬取到的信息存储到数据库中

爬取平台为电影天堂 获取到的数据仅为测试学习而用 爬取内容为电影名和电影的下载地址 创建表时需要建立三个字段即可 import urllib.request import re import pymysqldef film_exists(film_name, film_link):"""判断插入的数据是否已经存在""&qu…

element表格内多个输入框时如何添加表单校验

以下.vue文件Demo可直接复制运行&#xff1a; 重点&#xff1a; 1&#xff1a;表格数据定义在form里 2&#xff1a;prop需要加索引&#xff1b;索引前的变量不要加form&#xff0c;直接取里边的key&#xff0c;索引后的字段需要和表格里字段属性对应 。:prop"tableInfo.l…

软件工程知识梳理1-可行性研究

目的&#xff1a;确定问题是否值得去解决。就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程&#xff0c;也即是在较高层次上以较抽象的方式进行系统分析和设计的过程。 考察点&#xff1a;技术可…

0基础学习VR全景平台篇第140篇:摄影器材保养与维护

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 摄影器材属于精密仪器&#xff0c;在使用过程中会磨损、老化、积灰。如果不对摄影器材进行清洁和保养&#xff0c;油污、灰尘、水渍长期停留在设备上&#xff0c;不仅会大大缩短相机…

如何利用Laravel实现验证码功能

1、生成验证码图片 在Laravel中&#xff0c;生成验证码图片的方式通常是使用PHP的GD库。GD库是一种非常流行的PHP图像处理库&#xff0c;提供了很多方便的函数&#xff0c;可以轻松地生成各种类型的图像。在Laravel中&#xff0c;我们可以使用GD库的函数来实现验证码图片的生成…

从[redis:LinkedList]中学习链表

文章目录 adlistlistNodelistmacros[宏定义]listCreatelistInitNodelistEmptylistReleaselistAddNodeHeadlistLinkNodeHeadlistAddNodeTaillistLinkNodeTaillistInsertNodelistDelNodelistUlinkNodelistIndexredis3.2.100quicklistredis7.2.2quicklist redis的基本数据类型之一…

简单说说mysql的日志

今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志&#xff0c;redolog, undolog等。揭示它们的作用和用途&#xff0c;让我们工作中更能驾驭mysql。 redo 日志 如果mysql事务提交后发生了宕机现象&#xff0c;那怎么保证数据的持久性与完整性&#xff1f;…

MYSQL 创建用户以及解决MYSQL新建数据库看不到相关数据库信息的解决方案

MYSQL 创建用户以及解决MYSQL新建数据库看不到相关数据库信息的解决方案 首先 我们创建一个mysql用户账户 如创建一个test用户 密码123456 命令如下&#xff1a; CREATE USER testlocalhost IDENTIFIED BY 123456;创建了一个db1的数据库 命令如下&#xff1a; create databa…

达梦数据库死锁排查与解决

在达梦数据库系统中&#xff0c;死锁是指两个或多个事务相互等待对方释放资源&#xff0c;从而造成循环等待的现象&#xff0c;严重影响数据库的正常运行。以下是使用达梦数据库进行死锁排查和解决的具体步骤&#xff1a; 死锁查看 查询当前死锁信息 SELECT lc.lmode, lc.ta…

网站接入QQ登录

开发者认证&#xff0c;创建应用&#xff1a; &#xff08;1&#xff09;先在 QQ 互联 QQ互联管理中心 进行个人开发者认证&#xff0c;并审核 &#xff08;2&#xff09;创建【网站应用】&#xff0c;填写正确信息&#xff0c;获得对应的 appid 与 appkey&#xff0c;并审核…

Java学习笔记2024/2/1

1. 循环高级 1.1 无限循环 package com.angus.loopAdvanced.infiniteLoop_1;public class note {public static void main(String[] args) {//无限循环:循环一直停不下来//for循环//while循环 ->最常用,因为不知道循环的范围或者次数//do...while循环// for (;;){ …