【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,例如

{
    "name":"Jack",
    "age":21,
    "girl":{
        "name":"Rose",
        "age":21
    }
}

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

5.ik分词器

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

1.ik_max_word(常用)

 将文本做最细粒度拆

如果对“南京市长江大桥”采用ik_max_word分词

POST _analyze
{
   "analyzer": "ik_max_word",
   "text": "南京市长江大桥"
}

分词结果如下:

{
   "tokens": [
      {
         "token": "南京市",
         "start_offset": 0,
         "end_offset": 3,
         "type": "CN_WORD",
         "position": 0
      },
      {
         "token": "南京",
         "start_offset": 0,
         "end_offset": 2,
         "type": "CN_WORD",
         "position": 1
      },
      {
         "token": "市长",
         "start_offset": 2,
         "end_offset": 4,
         "type": "CN_WORD",
         "position": 2
      },
      {
         "token": "长江大桥",
         "start_offset": 3,
         "end_offset": 7,
         "type": "CN_WORD",
         "position": 3
      },
      {
         "token": "长江",
         "start_offset": 3,
         "end_offset": 5,
         "type": "CN_WORD",
         "position": 4
      },
      {
         "token": "大桥",
         "start_offset": 5,
         "end_offset": 7,
         "type": "CN_WORD",
         "position": 5
      }
   ]
}

2.ik_smart

会做最粗粒度拆分

如果对“南京市长江大桥”采用ik_smart分词,分词结果如下:

POST _analyze
{
  "analyzer": "ik_smart",
  "text": "南京市长江大桥"
}
{
  "tokens": [
    {
      "token": "南京市",
      "start_offset": 0,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "长江大桥",
      "start_offset": 3,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 1
    }
  ]
}

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原理之倒排索引 - 同济小孙 - 博客园


 

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Elasticsearch是一个分布式搜索和分析引擎,它基于Lucene搜索库,可以快速、实时地存储、搜索和分析大规模数据。以下是一些Elasticsearch中的概念: - 索引(Index):在Elasticsearch中,索引是一个包含文档的逻辑容器,可以将其看作是数据库中的表。每个索引都有一个唯一的名称,并且可以包含多个类型的文档。 - 文档(Document):文档是Elasticsearch中的基本单位,它可以是任何结构化或半结构化的JSON数据。每个文档都有一个唯一的ID和一个包含字段和值的数据体。 - 字段(Field):字段是文档中的数据项,它们代表了文档的各个属性。每个字段都有一个名称和一个数据类型,例如字符串、数字、日期等。 - 映射(Mapping):映射定义了文档中的字段及其数据类型,相当于数据库中表的结构定义。 - 查询(Query):在Elasticsearch中,查询是指搜索条件,可以使用各种操作符和规则来构建复杂的查询。 - 聚合(Aggregation):聚合是Elasticsearch用于分析数据的功能,它可以对查询结果进行统计、分组、计算、过滤等操作,类似于SQL中的GROUP BY。 - 节点(Node):Elasticsearch集群中的每个服务器都是一个节点,每个节点都可以运行一个或多个索引和分片。 - 分片(Shard):分片是将索引拆分成多个部分以实现分布式存储和处理的机制。每个分片都是一个Lucene索引,可以在集群中的多个节点上分布式存储和处理。 - 副本(Replica):副本是分片的复制品,用于实现高可用性和负载均衡。每个分片可以有多个副本,可以在集群中的多个节点上复制存储。 这些概念是Elasticsearch中的一些关键概念,了解它们可以帮助你更好地理解Elasticsearch的工作原理和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值