elasticsearch V1.0

news/2024/7/24 4:50:21 标签: go, elasticsearch

与你相识


博主介绍:

– 本人是普通大学生一枚,每天钻研计算机技能,CSDN主要分享一些技术内容,因我常常去寻找资料,不经常能找到合适的,精品的,全面的内容,导致我花费了大量的时间,所以会将摸索的内容全面细致记录下来。另外,我更多关于管理,生活的思考会在简书中发布,如果你想了解我对生活有哪些反思,探索,以及对管理或为人处世经验的总结,我也欢迎你来找我。

– 目前的学习专注于Go语言,辅学算法,前端领域。也会分享一些校内课程的学习,例如数据结构,计算机组成原理等等,如果你喜欢我的风格,请关注我,我们一起成长。


Table of Contents

  • Elasticsearch
    • elasticsearch在学习什么?
    • 历史
    • 什么是ELK
    • 使用
      • 安装
        • Elasticsearch安装
          • 安装可视化界面
          • 解决elasticsearch和es-head之间的通信跨域问题
        • Kibana安装
          • 使用
          • 汉化
      • Es使用
        • IK分词器
          • 安装
          • 使用
        • REST风格
    • 参考资料
    • 总结


Elasticsearch

elasticsearch 读音:[ɪˈlæstɪk] [sɜːtʃ]

现在elasticsearch更新到7.x的版本了,它与6.x的差别很大,很多的api都不一样了,而官方针对6.x和7.x也有不同的文档表示。

elasticsearch_26">elasticsearch在学习什么?

我们在程序中往往需要用到查询功能,比如全文搜索,模糊搜索等,在传统的解决方案中,主要是使用SQL的like关键字来进行模糊查询,但是如果数据量太大了的话,这种方式的效率十分的慢。

当初的解决方案是给sql字段加上索引,但是这个虽然会把速度再提上一个档次,但是还是达不到一个大数据的要求。

这个时候我们就有必要去学习一下分布式搜索引擎了,elasticsearch就是做这个事情的,它就做一件事——搜索

就拿下图来讲,如果我们要用SQL来做这面这些复杂的搜索,它的实现逻辑就会是否的复杂,而如果使用elasticsearch就会简单很多。

image-20210923164619052

Elasticsearch是基于Lucene这个工具包做了一些封装和增强,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

除了elasticsearch,Solr也可以干这件事情,所以我们在学习的过程中,也会对比和参考着进行学习。

建议在大数据了的情况下都使用ES来完成搜索功能。

历史

这个部分其实还有关于Lucene,Elasticsearch,Solr三者的介绍,以及ES和Solr的差别等。 但是我感觉用处不是很大,等我对它们各个使用的概念比较清晰的时候,再去了解这些背后的人文故事,可能更能感受其温度。image-20210923221650734

关于ES和Solr的选择:

截图一下视频中的片段,简单的了解一下。

image-20210923222738776

什么是ELK

ELK是Elasticsearch、Logstash、Kibana三大开源框架的首字母大写简称。

Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架,它的搜索能力很强大,而Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式的数据,经过过滤之后再输出到不同目的地。 Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。

它们三个合到一起常常被说是日志分析架构技术栈,但实际上ELK不仅仅适用于日志分析,还可以支持其它任何数据分析和收集的场景。

使用

今天我们在Windows环境下来试用一下,官方网站下载客户端工具巨慢,所以我们使用华为云的镜像下载。

  • ElasticSearch

  • logstash

  • kibana

安装

Elasticsearch安装

然后我们会下载下来三个压缩包,首先解压ElasticSearch

熟悉目录:image-20210925200147404

运行:

点击elasticsearch.bat文件运行。

image-20210925200231587

运行之后我们可以得知它的默认端口是9200,所以我们直接访问,进行访问测试。

image-20210925200410580

安装可视化界面

可视化界面有很多的插件,插件用的最多的是head插件,下载下来之后,可以通过github的read me文件来看elasticsearch-head如何启动。

image-20210925200853966

elasticsearcheshead_98">解决elasticsearch和es-head之间的通信跨域问题

我们需要修改elasticsearch.yml文件,在最下面写上允许跨域的配置,然后重新启动一下elasticsearch即可。

image-20210925201021989

此时我们去es-head的图形化界面中,就会有下面这个样子。我们一般只关心前三个选项,概览就是所有的库信息,索引就是看有多少个索引库,所有的数据在数据浏览里。

后面的查询我们到Kibana中做。

image-20210925201154325

Kibana安装

去Kibana官网进行安装即可。

使用

在bin目录下点击kibana.bat直接运行即可。可以发现其默认端口为5601,我们直接进入即可。

image-20210925202708856

汉化

默认的测试页面是全英文的,我们需要对其进行汉化,Kibana本身已经支持了汉化,只是需要我们自己去配置文件中进行更改。我们找到其配置文件

image-20210925203134132

可以看到它默认的是英文,我们在这里复制一行,改成中文即可。

image-20210925203158547

Es使用

types在8.0会被彻底取消。 了解即可。

image-20210925203814663

IK分词器

它的作用是把一段信息划分为一个个的关键字,在搜索的时候就会把这个进行分词,也会把索引库中的数据进行分词,然后进行一个匹配的操作,默认的中文分词是把每一个字都看做一个词,比如“你好”,会分成“你”,“好”,这显然是有问题的,所以我们需要安装中文分词器ik来解决这个问题。

IK提供了两个分词算法:ik_smartik_max_word。 第一个为最少切分,第二个为最细粒度划分。

安装

我们只需要下载好IK分词器之后,解压到elasticsearch的plugins文件夹下,新建一个ik文件夹,然后放进去,重启elasticsearch就可以了,在elasticsearch重启的时候,可以看到ik plugins加载的过程。

也可以通过elasticsearch-plugin命令来查看elasticsearch安装的插件。

image-20210925205213470

使用

ik_smart 是最少切分,它就是只切一次就可以了,原来是什么样子,现在还是什么样子。

image-20210925211933292

ik_max_word是最细粒度划分,它就是穷尽的的信息的分词可能,原理是按照内部的一个字典来进行拆分的。

image-20210925212025234

它会把它认为的词给拆分出来,拆分的方式是通过config文件下的各种dic文件,里面存了前缀后缀等字典文件,而这些默认的在有些时候是远远不足以我们的使用的,比如我想在网络上搜索我的名字——雅各布,但是它会给我拆分为“雅”,“各”,“布”,也就是对于IK分词器来说,它认为这三个字就是拆分开的,而我们想要把他们合到一起,我们就需要告诉IK分词器,这是一个词,这个时候就需要我们写一个自己的字典了。

image-20210925212631170

你可以创建自己的字典文件,比如里面写上了“雅各布”,这个时候ik就会认识“雅各布”这个词语了,保存之后,还需要在IK配置文件中配置一下用户的扩展字典的位置。

然后重启一下es即可。

image-20210925212917407

REST风格

image-20210925214718796

put用来创建一个索引,不仅是可以在这里发送请求,postman或者各种请求的工具都是可以发送请求来创建的。

image-20210925214812806

通过GET来获取具体索引的信息

image-20210925215359295

我们可以通过一些关键字来进行一些模糊匹配,以及右边的结果之中,_score表示了匹配度,version表示被修改的次数。

image-20210925220118784

我们可以在get中使用各种参数和api来完成我们的需求,然后右边会根据score的权重来进行排序。

image-20210925220412833

参考资料

  • 狂神说 | bilibili视频
  • 李文周 | 个人博客

总结

由于时间不太够,所以用四倍速过了一遍视频,目前脑子里只是知道ELK是干什么的,然后怎么安装和解压,以及一些使用方式。

等到以后如何用到es的时候,需要再去看一遍文档。


欢迎评论区讨论,或指出问题。 如果觉得写的不错,欢迎点赞,转发,收藏。


http://www.niftyadmin.cn/n/1736536.html

相关文章

Go单元测试学习笔记 V1.0

与你相识 博主介绍: – 本人是普通大学生一枚,每天钻研计算机技能,CSDN主要分享一些技术内容,因我常常去寻找资料,不经常能找到合适的,精品的,全面的内容,导致我花费了大量的时间&a…

Xorm学习笔记

与你相识 博主介绍: – 本人是普通大学生一枚,每天钻研计算机技能,CSDN主要分享一些技术内容,因我常常去寻找资料,不经常能找到合适的,精品的,全面的内容,导致我花费了大量的时间&a…

casbin学习笔记

与你相识 博主介绍: – 本人是普通大学生一枚,每天钻研计算机技能,CSDN主要分享一些技术内容,因我常常去寻找资料,不经常能找到合适的,精品的,全面的内容,导致我花费了大量的时间&a…

python module ‘mitmproxy.proxy‘ has no attribute ‘config‘问题解决

python module ‘mitmproxy.proxy’ has no attribute config’问题解决 原因是mitmproxy的版本太高,目前7.x的版本已经不是这样解决了,使用下面的语句降一下版本即可: pip install mitmproxy6.0.2 -i http://pypi.douban.com/simple/

001问 | 为什么Go语言的for循环结构体不能用var?

偶然间,我的好朋友问起我这个问题,我还真没有好好思考过这个问题。 我查了Go语言圣经,知名博客,以及Go中文文档,发现都没有阐述这个问题。 后来找来找去也只有下面的解释: for的初始化语句不能是任何类型…

002问 | 在Go语言中fmt.Println和println的区别?

它们的区别是什么? 我还真没思考过这个问题。 可以看到它们的颜色不同,fmt.Println输出到标准输出,而println输出到标准错误。log标准包里的打印函数会默认写入标准错误。println主要程序启动和调试的时候用,应该是Go语言内部的实…

IT大学生成长周报 | 发刊词

目录 文章目录目录IT大学生成长周报发刊词IT大学生成长周报发刊词 想长期做这样一件事情: 每天搜集一些资料,看一些文章,主要方向是Go语言,It趋势和发展,社会时事,然后把这些文章我觉得比较好的收集整理起…

IT大学生成长周报 | 第 1 期

文章目录IT大学生成长周报(第 1 期)编程语言插桩Linux高性能服务器代码学习关于Mysql锁的一些知识和试验一道关于array的题目go-spewMysql为什么这么重要?Go编程模式:详解函数式选项模式Go 1.18 中的 any 是什么?Go&am…