zoukankan      html  css  js  c++  java
  • Elasticsearch的数据组织

    数据组织主要从以下二方面着手

      逻辑设计:文档、类型、索引

      物理设计:节点、分片

           倒排索引

    前言

    逻辑设计:我们把elasticsearch与关系型数据库做个客观对比

    Relational DB Elasticsearch
    数据库(database) 索引(indices)
    表(tables) 类型(types)
    行(rows) 文档(documents)
    字段(columns) 字段(fields)

    elasticsearch(集群)中可以包含多个索引(数据库),每个索引可以包含多个类型(表),每个类型可以包含多个文档(行),每个文档可以包含多个字段(列)。

    注意:在之前版本中每个文档存储在一个索引中,并分配多个映射类型,映射类型用来表示被索引的文档或者实体的类型,这也带来一个问题(),导致后来版本6.0.0中一个文档只能包含一个映射类型,7.0.0中映射类型被弃用,到8.0.0中完全被删除。

    逻辑设计:文档、类型、索引

    文档属性

      elasticsearch是面向文档操作,也就是最小单位就是文档

      自我包含:一篇文档同时包含字段和对应的值 key:vaule形式

      可以是层次型的:一个文档中包含自文档

      灵活的结构:在关系型数据库中都要预先设计表才能对其操作,而elasticsearch中,有时候可以忽略某个字段或者动态的去添加一个字段(但是这样可能导致脏数据的出现,我们可以预定字段,之后不再改变字段)

      无模式:字段对应值得类型可以是不限类型的

    类型

      文档的逻辑容器,就像关系型数据库一样,表格是行的容器

      类型中对于字段的定义称为映射,比如name映射为字符串类型

    索引

      索引是映射类型的容器,索引是非常大的文档集合,它们都存在各个分片上

    物理设计:节点和分片

    节点

      一个集群至少包含一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引。

      默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成,而每个分片又有一个副本(replica shard,又称复制分片),这样,就有了10个分片。

    上图我们可以看到是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失。

    一个分片是一个Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

    倒排索引

    elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。

    1 Study every day, good good up to forever        # 文档1包含的内容
    2 To forever, study every day, good good up       # 文档2包含的内容
    term doc_1 doc_2
    Study ×
    To ×
    every
    forever
    day
    study ×
    good
    every
    to ×
    up

    若我们搜索 to forever包含每个词条的文档

    term doc_1 doc_2
    to ×
    forever
    total 2 1

    elasticsearch的索引和Lucene的索引对比

      elasticsearch将索引被分为多个分片,每份分片是一个Lucene的索引。所以一个elasticsearch索引是由多个Lucene索引组成的。

    了解更多: 倒排索引 | 倒排索引原理和实现

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11387172.html
Copyright © 2011-2022 走看看