ElasticSearch–study
本文最后更新于92 天前,其中的信息可能已经过时。
ElasticSearch

ElasticSearch

基础概念 对照mysql这样的数据库来学习

  • 索引—mysql中的表 如用户索引就相当于用户表

  • 文档—mysql表中的一条记录 如:

    es中:

    { “id”:5,

    “name”:“青青子衿”

    }

    mysql中:

    idname
    5青青子衿
  • 字段 — 很好理解就相当于mysql的属性列名

     

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

Elasticsearch:擅长海量数据的搜索、分析、计算

Mysql:擅长事务类型操作,可以确保数据的安全和一致性

 

 

安装 建议都用docker安装,要不安装起来真有些麻烦

  • 安装内容

    • elasticsearch 提供数据存储、搜索、分析
    • kibana 为elasticsearch提供可视化功能
    • ik分词库(真不是黑子) 可以为elasticsearch分词进行自定义操作
    • 注意安装内容之间都有版本限制,es官网上会有说明,最好是所有软件都安装统一版本
  • 安装elasticsearch

    docker run -d \
      --name es \
      -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 hmall \
      -p 9200:9200 \
      -p 9300:9300 \
      elasticsearch:7.12.1
    
  • 安装kibana

    docker run -d \
    --name kibana \
    -e ELASTICSEARCH_HOSTS=http://es:9200 \
    --network=hmall \
    -p 5601:5601  \
    kibana:7.12.1
    
  • 安装IK分词器(这个安装路径其实是在es文件下的es-plugins目录下)作为es的一个插件

    docker exec -it es ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
    
  • 安装完成就我们重启一下es容器就可以开始咱们的es开心之旅啦

    docker restart es
    

 

学习使用IK分词器

  • 先不着急学习es,先看看ik都是一些什么妖魔鬼怪有什么作用

    使用IK分词器 首先要保证es、kibana是打开的才能看到效果,而且是先打开es 才能打开kibana。也就两句命令的事在这就不多说了

 

  • 首先进入Kibana的DevTools上来测试分词器 开启服务后即进入浏览器访问localhost:5601

     

    现在有一个需求:我们搜索一句诗句比如:常记溪亭日暮 希望可以进行模糊搜索 包含常、记、溪亭、日暮的诗句。那么首先要做的事当然是对这句诗句进行分词啦!那么如果我们使用es提供的分词器会得到什么效果呢?咱们一探究竟

    在控制台上输入

    POST /_analyze
    {
      "analyzer": "standard",
      "text": "常记溪亭日暮"
    }
    

看看结果:

image-20231113090158665

可以看到他把每个字都单独拆分了,这其实是符合英文的单词拆分的,一个单词拆分成一个词条,但这对中文十分不友好(谁叫这是老外的东西呢),中文很多时候需要两个字或者多个字在一起才会有特定的意思。那么这个时候就是ik发挥作用的时候了。

IK分词器是由中国开发者搜狗公司(Sogou)开发的。IK分词器支持细粒度和智能切分两种分词模式:

  1. 细粒度切分(ik_smart): 以最大词长切分文本,适合一般的文本分析应用。
  2. 智能切分(ik_max_word): 在细粒度切分的基础上,会对长词再次切分,适合需要更精细分词的场景。

现在我们试试ik分词器对这句诗句的分词结果吧。在控制台左边输入:

POST /_analyze
{
  "analyzer": "standard",
  "text": "常记溪亭日暮"
}

结果如下:

image-20231113091150502

  • ik分词添加自定义字典

如此这样,常、记、日暮是好了,但是溪亭还是分开了,这是因为在中文中溪亭本来也不是一个词语,只是李清照笔下的一处赏日落的好去处,ik也不认识这地方。那如何教它认识认识呢?

我们可以到ik分词器的配置文件中修改,大概在这个位置

image-20231113092303817

有个IKAnalyzer.cfg.xml文件里面内容如下(可能略有不同,但没关系)

image-20231113092554411

有两种配置,且都可以配置多个词典

1.扩展词典,作用就是像我们的需求一样,让es认识“溪亭”是一个词语不应该分开,“李清照”是一个诗人人名,也不应该分开。

2.停止词典,作用就是对于一些实际意义不大的词、字通常是一些介词连词比如 在,去,又样的词装作不认识,处理它们的时候直接跳过。比如这样的需求“常记溪亭日暮” 希望分词结果中不包含 常,记两字就可以写入这个词典。

下面我们来对“溪亭”两字进行词典扩展:

1.先创建一个dic文件,比如my.dic,(先创建一个txt文件写完再改成dic文件就行了),注意文件位置要与IKAnalyzer.cfg.xml在同一目录下(当然ik也支持远程词典,挂个url也行)。 格式内容如下:这样他就认识了溪亭是一个词了。

image-20231113094247843

2.在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">authorName</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords"></entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->


    <!--    新加的扩展词典映射-->
    <entry key="ext_dict">my</entry>
</properties>

3.重启一下es服务。让它读到这个配置文件。但是es不支持重启,我们只能结束进程然后再开启进程。如果是前台启动就ctrl+C就停止了,后台启动就要去找一下pid然后kill一下。最后再启动es服务。这里演示后台启动情况:

ps -ef | grep elasticsearch 

可以看到pid是710627,kill这个进程就可以啦,最后可以检测一下是不是已经停止了

kill -9 710627

image-20231113100809221

再重新启动一下进程,注意es服务挂掉,kibana也会挂掉,所以都需要重新启动

 

最后我们来看一下成果吧:

image-20231113105446252

可以看到es已经认识‘’溪亭‘’是一个词了。分词结果完全符合我们的需求!!!

 

kibana学习

  • 其实这个应该放在ik前面,但谁让我们是真爱粉呢,kibana其实也就是相当于一个数据库可视化工具而已,工具我们就掌握一些基本使用方法就可以了。

  • 首先可以对kibana这个工具汉化一下,更好的学习:

    • 打开kibana.yml配置文件中添加一行配置

      i18n.locale: "zh-CN"
      
  • 修改了配置我们就要重新启动kibana,然后使用浏览器访问本机的5601端口

  •  

 

 



 

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇