ElasticSearch 中的中文分词器以及索引基本操作详解
@[toc] 本文是松哥所录视频教程的一个笔记,笔记简明扼要,完整内容小伙伴们可以参考视频,视频下载链接:https://pan.baidu.com/s/1NHoe0_52ut9fDUh0A6UQLA 提取码: kzv7
1.ElasticSearch 分词器介绍
1.1 内置分词器
ElasticSearch 核心功能就是数据检索,首先通过索引将文档写入 es。查询分析则主要分为两个步骤:
- 词条化:分词器将输入的文本转为一个一个的词条流。
- 过滤:比如停用词过滤器会从词条中去除不相干的词条(的,嗯,啊,呢);另外还有同义词过滤器、小写过滤器等。
ElasticSearch 中内置了多种分词器可以供使用。
内置分词器:
分词器 | 作用 |
---|---|
Standard Analyzer | 标准分词器,适用于英语等。 |
Simple Analyzer | 简单分词器,基于非字母字符进行分词,单词会被转为小写字母。 |
Whitespace Analyzer | 空格分词器。按照空格进行切分。 |
Stop Analyzer | 类似于简单分词器,但是增加了停用词的功能。 |
Keyword Analyzer | 关键词分词器,输入文本等于输出文本。 |
Pattern Analyzer | 利用正则表达式对文本进行切分,支持停用词。 |
Language Analyzer | 针对特定语言的分词器。 |
Fingerprint Analyzer | 指纹分析仪分词器,通过创建标记进行重复检测。 |
1.2 中文分词器
在 Es 中,使用较多的中文分词器是 elasticsearch-analysis-ik,这个是 es 的一个第三方插件,代码托管在 GitHub 上:
1.2.1 安装
两种使用方式:
第一种:
- 首先打开分词器官网:https://github.com/medcl/elasticsearch-analysis-ik。
- 在 https://github.com/medcl/elasticsearch-analysis-ik/releases 页面找到最新的正式版,下载下来。我们这里的下载链接是 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip。
- 将下载文件解压。
- 在 es/plugins 目录下,新建 ik 目录,并将解压后的所有文件拷贝到 ik 目录下。
- 重启 es 服务。
第二种:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
1.2.2 测试
es 重启成功后,首先创建一个名为 test 的索引:
接下来,在该索引中进行分词测试:
1.2.3 自定义扩展词库
1.2.3.1 本地自定义
在 es/plugins/ik/config 目录下,新建 ext.dic 文件(文件名任意),在该文件中可以配置自定义的词库。
如果有多个词,换行写入新词即可。
然后在 es/plugins/ik/config/IKAnalyzer.cfg.xml 中配置扩展词典的位置:
1.2.3.2 远程词库
也可以配置远程词库,远程词库支持热更新(不用重启 es 就可以生效)。
热更新只需要提供一个接口,接口返回扩展词即可。
具体使用方式如下,新建一个 Spring Boot 项目,引入 Web 依赖即可。然后在 resources/stastic 目录下新建 ext.dic 文件,写入扩展词:
接下来,在 es/plugins/ik/config/IKAnalyzer.cfg.xml 文件中配置远程扩展词接口:
配置完成后,重启 es ,即可生效。
热更新,主要是响应头的 Last-Modified
或者 ETag
字段发生变化,ik 就会自动重新加载远程扩展辞典。
视频笔记,在公众号江南一点雨后台回复 elasticsearch04 获取下载链接。
2. ElasticSearch 索引管理
微信公众号江南一点雨后台回复 elasticsearch05 下载本笔记。
启动一个 master 节点和两个 slave 节点进行测试(参考第二集的视频搭建)。
2.1 新建索引
2.1.1 通过 head 插件新建索引
在 head 插件中,选择 索引选项卡,然后点击新建索引。新建索引时,需要填入索引名称、分片数以及副本数。
索引创建成功后,如下图:
0、1、2、3、4 分别表示索引的分片,粗框表示主分片,细框表示副本(点一下框,通过 primary 属性可以查看是主分片还是副本)。.kibana 索引只有一个分片和一个副本,所以只有 0。
2.1.2 通过请求创建
可以通过 postman 发送请求,也可以通过 kibana 发送请求,由于 kibana 有提示,所以这里采用 kibana。
创建索引请求:
PUT book
创建成功后,可以查看索引信息:
需要注意两点:
- 索引名称不能有大写字母
- 索引名是唯一的,不能重复,重复创建会出错
2.2 更新索引
索引创建好之后,可以修改其属性。
例如修改索引的副本数:
PUT book/_settings { "number_of_replicas": 2 }
修改成功后,如下:
更新分片数也是一样。
2.3 修改索引的读写权限
索引创建成功后,可以向索引中写入文档:
PUT book/_doc/1 { "title":"三国演义" }
写入成功后,可以在 head 插件中查看:
默认情况下,索引是具备读写权限的,当然这个读写权限可以关闭。
例如,关闭索引的写权限:
PUT book/_settings { "blocks.write": true }
关闭之后,就无法添加文档了。关闭了写权限之后,如果想要再次打开,方式如下:
PUT book/_settings { "blocks.write": false }
其他类似的权限有:
- blocks.write
- blocks.read
- blocks.read_only
2.4 查看索引
head 插件查看方式如下:
请求查看方式如下:
GET book/_settings
也可以同时查看多个索引信息:
GET book,test/_settings
也可以查看所有索引信息:
GET _all/_settings
2.5 删除索引
head 插件可以删除索引:
请求删除如下:
DELETE test
删除一个不存在的索引会报错。
5.6 索引打开/关闭
关闭索引:
POST book/_close
打开索引:
POST book/_open
当然,可以同时关闭/打开多个索引,多个索引用 , 隔开,或者直接使用 _all 代表所有索引。
2.7 复制索引
索引复制,只会复制数据,不会复制索引配置。
POST _reindex { "source": {"index":"book"}, "dest": {"index":"book_new"} }
复制的时候,可以添加查询条件。
2.8 索引别名
可以为索引创建别名,如果这个别名是唯一的,该别名可以代替索引名称。
POST /_aliases { "actions": [ { "add": { "index": "book", "alias": "book_alias" } } ] }
添加结果如下:
将 add 改为 remove 就表示移除别名:
POST /_aliases { "actions": [ { "remove": { "index": "book", "alias": "book_alias" } } ] }
查看某一个索引的别名:
GET /book/_alias
查看某一个别名对应的索引(book_alias 表示一个别名):
GET /book_alias/_alias
可以查看集群上所有可用别名:
GET /_alias
最后,松哥还搜集了 50+ 个项目需求文档,想做个项目练练手的小伙伴不妨看看哦~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数据中台技术及业务发展史与未来趋势展望
作者:陈晓勇、柯根 阿里巴巴数据技术编年 简史 2003年淘宝诞生于杭州一间民居。次年,Google发表了三篇大数据论文将计算技术引入大数据时代。 2004年Doug Cutting和Mike Cafarella根据Google的论文实现了Hadoop的HDFS和MR计算框架。 2006年 Hadoop项目进入Apache社区。 2008年9月Hive成为Hadoop的子项目,之后成为Apache的顶级项目。同年,淘宝开始实施基于Hadoop系统的数据计算平台搬迁-云梯1。 2009年阿里云诞生,阿里云开始写下Maxcompute第一行代码,中国的各种云端服务开始涌现。 2014年阿里巴巴实施登月计划,完成基于Maxcompute平台的数据平台迁移-云梯2,汇总全集团的数据业务到一个平台上,完成数据公共层建设,OneData体系和集团的数据中台渐趋成型。 2014年4月Intel投资Cloudera,放弃自主的Hadoop发行版,同年Cloudera进入中国市场。 2017年数据中台产品Dataphin产品问世,同时支持Maxcompute和Hadoop大数据平台,OneData内部的...
- 下一篇
解密JVM虚拟机底层原理【方法区】
前言 再次声明本章是一个系列中的其中一段,若想了解更多JVM虚拟机底层原理 点击首页,或关注博主,今天来谈方法区,对于方法区的内容今天多,各位听我慢慢说。 方法区 单单从名字上来看方法区似乎与我们的方法定义有关,确实如此,但是还不够严谨,我也在网上看了很多方法区的定义,但是五花八门,总感觉不够清晰!所以我们一起看看JVM规范中对方法是怎么定义的? JVM规范-方法区定义 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html 定义: 翻译:首先是所有Java虚拟机线程共享的一块区域,他存放了根类结构相关的一些信息, 有类的变量,方法信息,构造方法和构造器信息,和一些特殊方法(主要指类构造器)。 方法区在虚拟机启动时被创建,逻辑上来讲是堆的一个组成部分,但是并不强制你的具体位置,(说白了就是不同的JVM厂商在实现的时候不一定完全按照标准来创造) 最后对于内存定义:方法区在内存不足是也会抛出 OutOfMemoryError 解释: 说了半天可能有人听不懂了,那就来解释一下! 拿oracle的hospost虚拟机举例(也...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主