当前位置:   article > 正文

【es】基本概念理解_es是什么

es是什么

一,初识es

1.是什么?

ElasticSearch 简称es,开源的分布式的全文搜索引擎,可以近乎实时的存储检索数据,es使用java开发,并且使用Lucene作为核心实现搜索功能。

2.能干什么?

分布式的搜索引擎,全文检索,数据分析引擎(分组聚合),对海量数据实时处理

3.有什么特点?

      快速搜索,分布式部署,可按照分数排序,resultful所有操作可以通过http接口进行

(1)分布式的实时文档存储,每个字段都可以被搜索和索引

(2)分布式的实时文档搜索引擎

(3)胜任上百个服务节点的拓展,支持PB以上的结构化和非结构化数据

4.使用场景?

       搜索类场景,日志分析类场景(经典的ELK组合,可完成日志收集分析存储)5

5.同类搜索对比?

      同类的有Lucene,solr,ElasticSearch是目前主流的全文搜索方案,但是 Lucene 只是一个工具包,它不是一个完整的全文检索引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

目前以 Lucene 为基础建立的开源可用全文搜索引擎主要是 Solr 和 Elasticsearch。

Solr 和ElasticSearch都是基于Lucene实现的,不同点如下:

1.solr利用zookpper进行分布式管理,而ElasticSearch自身携带分布式协调管理功能

2.elasticSearch实时性更好

相同点:

底层都依赖Lucene,lucene能实现全文搜索因为实现了倒排索引的查询结构

6.版本迭代?

6.1 集群连接变化

 transportClient被抛弃,es7的java代码,只能使用restClient,建议使用

High-level-rest-client的方法操作es集群

6.2 存储结构变化

  es7中使用默认的_doc作为type

6.3 默认配置变化

  默认节点为主机名,默认分片数改为1,不再是5

6.4 Lucene升级为lucene 8 查询相关性速度优化

二,入门概念

 1.索引 index

      理解为关系型数据库

 2.type

     理解为数据库中的一张表,注意ES各个版本之前区别很大

     es5中一个index可以有多个type; es6中一个index 只能有一个type;es7中逐步移除

type这个概念

3.映射 mapping

    定义了每个字段的类型等信息,相当于关系型数据库的表结构

4.常用数据类型

  String类型,分为两种。 text:可分词,不可参与聚合;keyWord:不可分词,数据作为完整字段匹配,可以参与聚合

     数字:number,可以分为Long,integer,short,byte,double,float

     数组:array

     布尔:boolean

     日期:可以对日期格式格式化日期存储,但是建议存储为毫秒值,存储为long,节省空间。

     经纬度:geo_point,ip

     对象:object,例如

  1. {
  2. "name":"Jack",
  3. "age":21,
  4. "girl":{
  5. "name":"Rose",
  6. "age":21
  7. }
  8. }

  4.通过和关系型数据库的对比,能更加容易理解

5.ik分词器

有两种分词模式:ik_matx_word 和ik_smart模式

1.ik_max_word(常用)

 将文本做最细粒度拆

如果对“南京市长江大桥”采用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": 4,
  21. "type": "CN_WORD",
  22. "position": 2
  23. },
  24. {
  25. "token": "长江大桥",
  26. "start_offset": 3,
  27. "end_offset": 7,
  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": 7,
  42. "type": "CN_WORD",
  43. "position": 5
  44. }
  45. ]
  46. }

2.ik_smart

会做最粗粒度拆分

如果对“南京市长江大桥”采用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": 7,
  14. "type": "CN_WORD",
  15. "position": 1
  16. }
  17. ]
  18. }

6.倒排索引

(1)正向索引(forward index)

        在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合。

例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数

和出现位置。

(2)正向索引结构

 文档1的ID>单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表…

 一般是通过key找到value 。

如果只存在正向索引,那就需要扫描索引库中的所有文档,找出包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次呈现给用户。

(3)反向索引 (inverted index)

所以搜索引擎会将正向索引重构为倒排索引,把文件ID对应关键词的映射转化为关键词到ID的映射,从词的关键字去找文档

(4) 我在网上找的一个比较容易理解的例子如下:

    假设有一批技术书籍,编好编号如下图

如果想搜索并发相关的词,正向索引呢就会遍历表格,找到编号为1和4的两条记录。

如果采用倒排索引的话,首先会对书籍的名称进行分词,比如:Java并发编程之美,会被分词成为 java  并发 编程 , 分词之后,会存储分词和文档ID的对应关系

 这时,在倒排索引中搜索并发,就能够通过分词并发找到对应的ids编号,

 (4)参考链接,个人觉得讲解很好,很容易理解:ES原理之倒排索引 - 同济小孙 - 博客园


 

 

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

闽ICP备14008679号