大数据-172 Elasticsearch 索引操纵 与 IK 分词器 自界说停用词 Nginx 服务 ...

十念  金牌会员 | 2024-10-21 17:04:57 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

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

目前已经更新到了:



  • 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请求。
语法:
  1. PUT /索引名称
  2. {
  3.   "settings": {
  4.     "属性名": "属性值"
  5.   }
  6. }
复制代码
settings:就是索引库设置,其中可以索引库的各种属性,比如分片数、副本数等。目前我们不设置,先默认即可。
示例:
  1. PUT /wzkicu-index
复制代码
执行效果如下图:

判定索引是否存在

单个索引

语法:
  1. GET /索引名称
复制代码
示例:
  1. GET /wzkicu-index
复制代码
执行效果如下图所示:

多个索引

语法:
  1. GET /索引名称
  2. 1,2,3,4,5...
复制代码
示例:
  1. GET /wzkicu-index
  2. ,wzkicu,wzk
复制代码
执行效果如下图所示:(这里有不存在的索引,所以404了)

全部索引

方式1:
  1. GET _all
复制代码
执行效果如下图所示:

方式2:
  1. GET /_cat/indices?v
复制代码
执行效果如下图所示:

这里的health列,表示:


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

语法:
  1. POST /索引名称/_open
复制代码
示例:
  1. POST /wzkicu-index/_open
复制代码
执行效果如下图:

关闭索引

语法:
  1. POST /索引名称/_close
复制代码
示例:
  1. POST /wzkicu-index/_close
复制代码
执行效果如下图:

删除索引

语法:
  1. DELETE /索引名称1,2,3,4,5...
复制代码
示例:
  1. DELETE /wzkicu-index
复制代码
执行效果如下图所示:

IK分词器

下载项目

官方地点在这里,是GitHub开源的项目,安装方式许多,我这里就直接用官方的方式安装了:
  1. https://github.com/infinilabs/analysis-ik/releases/tag/Latest
复制代码
页面是如许的:

安装插件

  1. cd /opt/servers/elasticsearch-7.3.0/
  2. 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

  1. POST _analyze
  2. {
  3.   "analyzer": "ik_max_word",
  4.   "text": "山东省青岛市黄岛区"
  5. }
复制代码
我们的到的效果是:
  1. {
  2.   "tokens": [
  3.     {
  4.       "token": "山东省",
  5.       "start_offset": 0,
  6.       "end_offset": 3,
  7.       "type": "CN_WORD",
  8.       "position": 0
  9.     },
  10.     {
  11.       "token": "山东",
  12.       "start_offset": 0,
  13.       "end_offset": 2,
  14.       "type": "CN_WORD",
  15.       "position": 1
  16.     },
  17.     {
  18.       "token": "省",
  19.       "start_offset": 2,
  20.       "end_offset": 3,
  21.       "type": "CN_CHAR",
  22.       "position": 2
  23.     },
  24.     {
  25.       "token": "青岛市",
  26.       "start_offset": 3,
  27.       "end_offset": 6,
  28.       "type": "CN_WORD",
  29.       "position": 3
  30.     },
  31.     {
  32.       "token": "青岛",
  33.       "start_offset": 3,
  34.       "end_offset": 5,
  35.       "type": "CN_WORD",
  36.       "position": 4
  37.     },
  38.     {
  39.       "token": "市",
  40.       "start_offset": 5,
  41.       "end_offset": 6,
  42.       "type": "CN_CHAR",
  43.       "position": 5
  44.     },
  45.     {
  46.       "token": "黄岛区",
  47.       "start_offset": 6,
  48.       "end_offset": 9,
  49.       "type": "CN_WORD",
  50.       "position": 6
  51.     },
  52.     {
  53.       "token": "黄岛",
  54.       "start_offset": 6,
  55.       "end_offset": 8,
  56.       "type": "CN_WORD",
  57.       "position": 7
  58.     },
  59.     {
  60.       "token": "区",
  61.       "start_offset": 8,
  62.       "end_offset": 9,
  63.       "type": "CN_CHAR",
  64.       "position": 8
  65.     }
  66.   ]
  67. }
复制代码
执行的效果如下图所示:

ik_smart

  1. POST _analyze
  2. {
  3.   "analyzer": "ik_smart",
  4.   "text": "山东省青岛市黄岛区"
  5. }
复制代码
执行的效果是:
  1. {
  2.   "tokens": [
  3.     {
  4.       "token": "山东省",
  5.       "start_offset": 0,
  6.       "end_offset": 3,
  7.       "type": "CN_WORD",
  8.       "position": 0
  9.     },
  10.     {
  11.       "token": "青岛市",
  12.       "start_offset": 3,
  13.       "end_offset": 6,
  14.       "type": "CN_WORD",
  15.       "position": 1
  16.     },
  17.     {
  18.       "token": "黄岛区",
  19.       "start_offset": 6,
  20.       "end_offset": 9,
  21.       "type": "CN_WORD",
  22.       "position": 2
  23.     }
  24.   ]
  25. }
复制代码
执行的效果如下图所示:

提出题目

在现实环境中,有许多时间并不能够正确的理解我们断词断句,有时间有些词我们想要它拆分,有些词我们盼望它不拆分。
那我们怎么办呢?
词典使用

扩展词

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

有些词在文本中出现的频率非常高,但对本文的语义会产生很大的影响,比方:呢、了、啊等等,英语中也有雷同于 a 、the、of 等等。如许的词称为停用词。
停用词经常会过滤掉,不会被索引,在检索过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。
停用词可以加快索引的速率、淘汰索引库的巨细。
扩展词、停用词应该同一维护,避免集群中多台导致节点各自维护本身的一份。这里我们操持使用Web的方式,将dict词库共享给分词器等。
分词服务

设置Web
我这里使用 Nginx,你也可以使用 Tomcat:
  1. apt install nginx
复制代码
安装过程如下图所示:

访问页面:http://h121.wzk.icu,可以看到Nginx顺利运行:

编写dict内容:
  1. vim /var/www/html/stop_dict.dic
复制代码
向其中写入的内容如下:
复制代码
同理,我们写入 ext_dict.dic:
  1. vim /var/www/html/ext_dict.dic
复制代码
我们访问对应的页面,可以拿到对应的Web文件:

设置分词器

  1. # 这里看自己的版本 我选了好几个
  2. cd /opt/servers/elasticsearch-8.15.0/plugins/analysis-ik
  3. mkdir config
  4. vim IKAnalyzer.cfg.xml
复制代码
写入如下的内容:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  3. <properties>
  4.   <comment>IK Analyzer 扩展配置</comment>
  5.   <!--用户可以在这里配置自己的扩展字典 -->
  6.   <entry key="ext_dict"></entry>
  7.   <!--用户可以在这里配置自己的扩展停止词字典-->
  8.   <entry key="ext_stopwords"></entry>
  9.   <!--用户可以在这里配置远程扩展字典 -->
  10.   <entry key="remote_ext_dict">http://h121.wzk.icu/ext_dict.dic</entry>
  11.   <!--用户可以在这里配置远程扩展停止词字典-->
  12.   <entry key="remote_ext_stopwords">http://h121.wzk.icu/stop_dict.dic</entry>
  13. </properties>
复制代码
对应的截图如下所示:

重启服务

重启ES服务,测试效果。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表