当前位置:   article > 正文

ES搜索引擎入门+最佳实践(一)

es搜索

        ES在搜索和数据分析中的应用越来越广泛,在之前项目中对ES的使用有些心得,最近有不少朋友和同事都问到了ES,刚好最近也有些时间,所以打算通过8~10篇文章介绍下ES.(其实我也不知道最终会写下多少篇)

一.概述

        本篇文章计划给大家介绍什么ES,ES的架构,以及ES搜索入门.我尽量用简单不拖沓的语言给大家介绍,水平有限,时间也有限,各位读者如发现文中有不当之处,请留言指正.

二.什么是ES

        ES的全称是Elasticsearch,翻译过来就是弹性搜索,知道就可以,不用纠结这个词的含义,我觉得这个词并不能表述ES的含义.

        ES并不是传统意义上的数据库,所以不需要用传到的数据库例如Oracle,mysql等数据库与ES进行类比.ES是建立在Lucene(全文搜索)基础上的分布式准实时搜索引擎.

        ES与Mysql,Redis,MongoDB存在本质上的差别,它不是用来存储数据的地方,更多的是一个搜索引擎,可以快速的搜索我们需要的内容,并且对搜索的内容按照相关性的权重进行评分,从而实现相关度更高的内容优先级越高.

2.1 ES的基本概念

        先来了解ES里面包含的基本概念

2.1.1 索引

        和传统的索引概念类似,都是为了提高搜索效率的,这里需要了解的是ES的索引与Lucene(全文搜索)的索引因为分布式设计的原因,他们之间是一对多的关系.

2.1.2 文档

        ES中的文档就是数据记录,里面包含了字段,并且定义了字段的数据类型,ES提供了对文档的增删改查功能.比较特别的是这里引入了一个版本的概念,每次写操作版本号都会加1,在读取操作时,ES会返回最新版本的文档.

2.1.3 字段

        一个文档可以包含多个字段,每个字段对应有数据类型,除了传统的数据类型之外,ES还提供了其特有的数据类型,例如:IP地址,数组类型,经纬度类型. 这些类型在实际使用中也是经常用到.例如我们需要搜索家附近的美食.

2.1.4 映射

        建立索引时需要定义文档的数据结构,这种结构就是映射.在定义数据结构时一般需要指定数据类型,这里需要考虑清楚,因为数据类型一旦指定就不能做更改.

        ES还提供了一种自动映射功能: 在定义映射时字段没有指定数据类型,那么在添加该字段时,ES会根据提供的数据类型进行推断,从而自动进行字段类型的定义,同样的,一旦这个字段类型被推断出来了,就相当于已经定义了,后期也不能进行更改.

2.1.5 集群与节点

        在分布式系统中,多台服务器一起协作被称为集群,而每个服务器被称为节点.

2.1.6 分片与副分片

        在ES中会对数据进行切割,并存储在分布式部署的多个服务器中,在切割时是将每一个Lucene索引作为一个分片,每个索引默认为设置5个分片,分片的个数一旦设定不允许更改.

        也可以为分片创建副本,创建之后的副本叫做副分片,副分片的数量没有限制.

2.1.7 DSL

        DSL是ES的查询语言,采用JSON进行表达,这个跨平台跨语言进行通信.

2.1.8 ES的特点

        1) 索引方式与传统数据库不同,ES采用的倒排索引(反向索引)

        2) 在执行操作时ES假设冲突不会发生,采用乐观锁,不支持事务;

        3) 由于ES采用的是分片的方式,一开始就考虑到了数据的膨胀,有利于后期的扩展;

        4) ES在写入数据的时候是先写入缓存,大概1s之后写入磁盘,所以ES的数据大概有1s的延迟,被称为准实时.

三.ES的架构

3.1 节点的划分

        前面提到过节点就是服务器,按照职责可以分为master节点,数据节点,协调节点.

        master节点负责整个集群的维护工作.

        数据节点负责索引数据的存储,当客户端向某个节点发出请求的时候,那么这个节点被称为协调节点,请求结束,协调节点的生命周期结束.

3.2 分片与路由

        ES为了支持分布式部署,将数据进行分割,一个索引对应一个或者多个分片,并且实现了路由,由路由分配读取哪个分片.当某个分片出现问题的时候,集群会将该分片剔除,路由就不会给该分片分配查询.

3.3 文档读写

3.3.1 写入文档

        当ES的协调节点收到文档写入请求时, 会利用路由分派到具体的主分片上,然后再到分片上的节点,该节点的数据存储完成之后,节点在将数据同步到其他的副分片所在的节点,最终完成文档的写入工作.

3.3.2 读取文档

        协调定收到客服端某个索引文档读取请求时,协调点会找到该文档所在的所有分片,并使用轮询算法(不用纠结),选择一个合适的分片,并将请求转给这个分片下的节点,数据找到后返回给协调点,再有协调点将数据返回给客户端.

3.3.3 安装ES

下载路径:ES 下载路径

本案例使用的版本是7.17.12 

解压缩到一个文件夹,运行bin/elasticsearch.bat 就可以启动. 

然后在地址栏输入 http://localhost:9200/

就可以看到如下内容:

能成功运行,那么第一步已经跨出去了.

四.ES搜索入门

4.1 安装Kibana

kibana是开源,免费的可视化数据搜索和分析平台,本章中我们需要用到这个工具.下载地址是:

Download Kibana

下载的Kibana版本需要和ES的版本保持一致,本案例下载的是kibana-7.17.12.

4.2 运行kibana

运行bin/kibana.bat,然后在浏览器中访问:http://localhost:5601/app/home#/

点击上面的搜索框,选择Dev Tools 可以看到如下内容:

 

然后可以转到控制台

4.3 创建索引 

在左侧区域输入以下内容测试创建索引:

  1. PUT /fresh_mall //请求类型为put,fresh_mall是索引的名称
  2. {
  3. "mappings": {
  4. "properties": { //指定索引映射的字段和数据类型
  5. "title":{
  6. "type": "keyword" //title字段的数据类型为keyword
  7. },
  8. "detailContent":{
  9. "type":"text"
  10. },
  11. "price":{
  12. "type": "double"
  13. }
  14. }
  15. }
  16. }

4.4 在索引中添加测试数据

在索引中添加一条测试数据,同样在控制台输入:

  1. POST /fresh_mall/_doc/001
  2. {
  3. "title":"红富士苹果",
  4. "detailContent":"源生鲜正宗山东烟台红富士苹果官方旗舰店5斤孕妇新鲜水果含有维C",
  5. "price":39.9
  6. }

我们可以看到如下结果: 

 4.5 查看索引

GET /fresh_mall/_doc/001

4.6 根据字段搜索文本

  1. GET /fresh_mall/_search
  2. {
  3. "query": {
  4. "match": {
  5. "detailContent":"红富士"
  6. }
  7. }
  8. }

query表示搜索,match表示模糊匹配,但是这里需要detailContent字段不能是keyword,如果是keyword只能做完全匹配.

执行的结果如下:

  1. {
  2. "took" : 3,
  3. "timed_out" : false,
  4. "_shards" : {
  5. "total" : 1,
  6. "successful" : 1,
  7. "skipped" : 0,
  8. "failed" : 0
  9. },
  10. "hits" : {
  11. "total" : {
  12. "value" : 1,
  13. "relation" : "eq"
  14. },
  15. "max_score" : 0.8630463,
  16. "hits" : [
  17. {
  18. "_index" : "fresh_mall",
  19. "_type" : "_doc",
  20. "_id" : "001",
  21. "_score" : 0.8630463,
  22. "_source" : {
  23. "title" : "红富士苹果",
  24. "detailContent" : "源生鲜正宗山东烟台红富士苹果官方旗舰店5斤孕妇新鲜水果含有维C",
  25. "price" : 39.9
  26. }
  27. }
  28. ]
  29. }
  30. }

这里可以看到_score字段,是给这个查询结果的权重进行了评分,评分越高的证明与搜索词关联越紧密.

好了,今天暂且到这里了.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/199695
推荐阅读
相关标签
  

闽ICP备14008679号