Elasticsearch的基本概念

Elasticsearch是一个开源的分布式全文检索引擎,基于Lucene,强调简单易用。与Solr相比,Elasticsearch更易于安装和管理,支持JSON格式。ELK栈由Elasticsearch、Logstash和Kibana组成,用于日志管理和数据分析。Logstash负责数据收集和过滤,Kibana则提供数据可视化。Elasticsearch使用倒排索引实现快速搜索,适合大规模实时数据检索。

1、Elasticsearch的概念 

es,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据,其扩展性很好。es是使用Java开发并使用Lucene作为其核心来实现所有索引和搜索功能,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而实现简单的全文搜索。

2、Elasticsearch与solr的区别

区别    es    solr
安装方面es基本上是开箱即用(解压即可使用)solr的安装稍微复杂
管理方面es自带分布式协调管理功能  solr需要利用Zookeeper进行分布式管理
数据格式es仅支持json格式数据,但是基本够用 solr支持更多的格式,例如:json、xml、csv等
功能方面es注重于核心功能,高级功能主要依赖于第三方插件solr提的功能更多
性能方面es建立索引快既实时更新快,查询较于solr稍慢 solr查询速度快,当更新索引慢(既插入删除慢)
技术支持es相对开放维护者较少,更新速度快学习成本高 solr较为成熟拥有更为成熟的用户、开发和贡献者社区


3、ELK的概念

ELK时Elasticsearch、Logstash和Kibana三大开源框架的首字母大写,市面上也称为Elastic Stack。
    1. Elasticsearch是一个基于Lucene的分布式、通过Restful风格进行交互的近实时搜索平台框架。
    2. Lgstash是ELK的中央数据流引擎,用于从不同目标(文件/数据库/MQ)收集的不同数据格式,经过过滤后支持输出到不同的目的地(文件/MQ/Redis/elasticsearch/kafka等)。
    3. Kibana可以将ES的数据通过友好的页面展示出来,提供实时数据分析的功能。


4、Elasticsearch的核心概念

1. Elasticsearch与关系型数据库的客观对比
Elasticsearch是面向文档的,以下是关系型数据库与Elasticsearch的客观对比

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


2. Elasticsearch的相关设计
Elasticsearch(集群)中可以包括多个索引(数据库),每个索引可以包含多个类型(表),每个类型可以包含多个文档(行),每个文档可以包含多个字段(列)

1.物理设计:
    Elasticsearch在后台把每个索引划分为多个分片,每个分片可以在集群中的不同服务器减迁移。(注意:Elasticsearch单机部署也是一个集群,其默认集群名称为elasticsearch。)
    
2.逻辑设计:
    一个索引类型中可以包含多个文档,所以可以通过一系列顺序找到对应的文档信息,例如:索引 -> 类型 -> 文档ID,通过这个组合我们能够找到某个具体的文档。(注意:这里的文档ID不一定为整数,大部分情况这个ID是一个字符串。)
1.物理设计:
    Elasticsearch在后台把每个索引划分为多个分片,每个分片可以在集群中的不同服务器减迁移。(注意:Elasticsearch单机部署也是一个集群,其默认集群名称为elasticsearch。)
    
2.逻辑设计:
    一个索引类型中可以包含多个文档,所以可以通过一系列顺序找到对应的文档信息,例如:索引 -> 类型 -> 文档ID,通过这个组合我们能够找到某个具体的文档。(注意:这里的文档ID不一定为整数,大部分情况这个ID是一个字符串。)

Elasticsearch中相关关键字的描述

1.文档
    Elasticsearch是面向文档的,那么就意味着索引和搜索的最小单位就是文档,其中文档有以下几个重要的属性:
        - 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value
        - 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的
        -灵活的结构,文档不依赖于西安设定的模式,在Elasticsearch中。对于字段是非常灵活的,不用像关系型数据库那样需要提前定义字段才能使用
        
2.类型
    类型是文档的逻辑容器,就像关系型数据库一样,表格是航的容器。类型中对字段的定义称为映射。类型在最新的Elasticsearch中已经不是那么重要。
    
3.索引
    索引是映射类型的容器,Elasticsearch中的索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置,然后它们呗存储到各个分片上。
节点和分片的工作方式

    一个集群至少有一个节点,而一个节点就是一个elasticsearch进程,节点可以有多个索引默认的,如果创建索引那么索引将会有5个分片(primary shard,又称主分片)构成,每个主分片会有一个副本(replica shard,又称复制分片)。


倒排索引

    elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索引作为底层,这种结构适用于快速的全文搜索,一个索引有文档中所有不重复的列表构成,对于每一个词都有一个包含它的文档列表。elasticsearch的索引是有多个Lucene索引组成。
    
    倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。
 

### Elasticsearch基本概念 #### 节点与实例 节点是指一个 Elasticsearch 实例,其本质上是一个 Java 进程。每台机器可以运行多个 Elasticsearch 实例,但在生产环境中通常建议每台机器仅运行一个实例以优化性能和资源管理[^1]。 #### 集群组成 Elasticsearch 是一种分布式搜索引擎,由多个节点共同组成一个集群。一个集群至少包含一个节点,而每个节点都可以拥有多个索引[^4]。 #### 数据存储单元:索引、分片与副本 - **索引**:类似于传统数据库中的表,用于存储文档集合。 - **分片 (Shard)**:为了提高可扩展性和性能,索引被划分为若干个主分片(Primary Shard),这些分片分布在不同的节点上,默认情况下每个索引会被分成 5 个主分片。 - **副本 (Replica)**:每个主分片都有对应的副本分片(Replica Shard),用于提供冗余备份以及增强读取操作的能力。默认情况下,每个主分片都会有一个副本。 #### 数据定位机制 当向 Elasticsearch 插入一条数据时,系统会基于指定的关键字(Key)计算该条记录应归属于哪一个分片。此关键字通常是自动生成的 ID 或者可以根据具体需求设置成其他字段值,例如在某些业务场景下可能选用 `CompanyID` 作为 Key 来实现更精确的数据分布控制[^5]。通过下面这个公式完成分片的选择过程: ```plaintext shard_num = hash(_routing) % num_primary_shards ``` #### 功能特性 Elasticsearch 将全文搜索、结构化查询及数据分析等功能融合为一体,并能高效处理海量级数据集,在接近实时的时间范围内支持复杂的搜索请求和统计分析任务[^2]。它非常适合应用于大规模的日志监控、网站内容检索以及其他需要快速响应的大规模数据访问场合;而对于那些强调严格一致性且涉及较多关联运算的应用,则更适合采用 MySQL 等关系型数据库解决方案[^3]。 ### 示例代码展示如何创建简单的索引 以下是利用 Python 对接 Elasticsearch 并创建新索引的一个例子: ```python from elasticsearch import Elasticsearch es_client = Elasticsearch(["http://localhost:9200"]) index_name = "test_index" if not es_client.indices.exists(index=index_name): settings = { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "title": {"type": "text"}, "content": {"type": "text"} } } } response = es_client.indices.create(index=index_name, body=settings) print(f"Index created successfully {response}") else: print("Index already exists.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值