SpringCloud(七.1)ES(elasticsearch)+kibana+IK分词器的安装和使用

随着业务的发展,数据量越来越庞大,传统的mysql数据库就难以满足业务需求,所以在微服务架构下都会用到分布式搜索技术。

官网地址:https://www.elastic.co/cn/

什么是elasticsearch?

elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。并高亮显示。

elasticsearch是ELK技术栈的核心,底层是Lucene技术(Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API)。

 

插眼:在CSDN看到一篇ES相关不错的文章插眼记录 https://blog.csdn.net/weixin_44062380/article/details/121596538

 

1、文档

ES是面向文档存储,文档可以是一条商品数据,可以是一条订单信息。如图:

文档信息会被序列化为json格式后存储至elasticsearch。

 

2、索引

相同类型的文档集合称之为索引。如图:

 

 

 

elasticsearch优势?

  • 支持分布式,可水平扩展形成集群。
  • 提供Restful接口,可被任何语言调用。

 

 

elasticsearch和mysql区别?

 正向索引缺点:如上图,如果查询非索引字段会逐行进行判断。效率会非常低。

 

倒排索引:先根据词条查到文档id(主键)再根据id查到相应的文档。

 

 

 

安装elasticsearch和kibana

为什么也要安装kibana?

kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。可以非常方便的编写ES中的dsl语句,从而去操作ES。

 

安装资料

安装教程 --- 链接:https://pan.baidu.com/s/1qdOEQR9EjFJaySRIpM9K2Q 提取码:e6ch

ES tar包  ---  链接:https://pan.baidu.com/s/1z6E1neCyyY8BYuMh-R4s3A  提取码:h87v

Kibana tar包  ---  链接:https://pan.baidu.com/s/1FrDR3Bazv9DVOoLRehLAEA  提取码:zqud

IK分词器 tar包 ---  链接:https://pan.baidu.com/s/12C6aEGBxtTsOLPFojKhuOw 提取码:8vyc


注意事项:安装Kibana 版本一定要和ES保持一致!

 

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 es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

安装好es之后我们在浏览器中访问一下,端口配置的是9200,直接访问 服务器/虚拟机:9200,可以看到以下界面:

出现此界面就代表es安装启动成功了!

 

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

安装完成后,我们在浏览器中访问kibana的地址,我们这里的端口配置的是5601,直接访问 服务器/虚拟机:5601,可以看到以下界面:

 进入后我们点击  dev tools (DSL控制台,可以非常方便的发送DSL请求。)

下面含义是 查询所有数据,点击查询后就会把请求发送给ES。

 

它的本质就是发送一个 restful 到ES中(调用ES提供的 restful api)如图:

 

 

分词器

 

POST /_analyze
{
    "analyzer": "standard", //分组类型
    "text": "黑马程序员学习java太棒了!"
}

 

当analyzer为 english 或 standard 的时候,会发现他是按照一个字符一个字符来分,英文分的特别好,但对中文很不友好,如图:

 

如果想分词中文,使用专门的中文分词器 - IK 安装方法详见上面安装资料中的安装教程。

IK分词器官网地址:https://github.com/infinilabs/analysis-ik

 

安装完成后重启ES,重新在kibana中运行。

这里注意 IK分词器包含两种模式:

  • ik_smart:最少切分 (内存占用小,可以缓存更多的数据,效率高。)

  • ik_max_word:最细切分 (内存占用大,更精确)

 

GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "黑马程序员学习java太棒了"
}

效果:

  

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "黑马程序员学习java太棒了"
}

效果: 拆分的特别细

 

 

IK分词器的拓展和停用词典

IK分词器可能也不会分词很理想,如一些流行用语,如:白嫖、奥利给等等。

还有一些无用的分词想禁掉,如:的、了、哦、嗯、啊 或者一些禁词等等。

1、打开IK分词器config目录

 

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>
        <!--用户可以在这里配置自己的扩展字典 ext.dic 添加扩展词典-->
        <entry key="ext_dict">ext.dic</entry>

        <!--用户可以在这里配置自己的扩展停止词字典  stopword.dic 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>

3、在当前配置文件目录下(config文件夹下)新建 扩展词典ext.dic

打开 扩展词典ext.dic 添加我们想要分词的词语

 打开 停用词词典 stopword.dic 停掉我们想停用的词语(默认会有一些英文)

 4、重启es ---  docker restart es

 

 效果展示:

POST /_analyze
{
    "analyzer": "ik_smart",
    "text": "白嫖java学习视频,太棒了奥利给!"
}

 

POST /_analyze
{
    "analyzer": "ik_max_word",
    "text": "白嫖java学习视频,太棒了奥利给!"
}

 

posted @ 2024-04-12 15:56  一介桃白白  阅读(119)  评论(0编辑  收藏  举报