您的位置:首页 > 其它

ElasticSearch简介

2016-12-18 20:16 197 查看
    今天师哥从外面带回了一个新技术,关于全文搜索的。名叫elasticsearch,留下博客一篇,记录此次的学习过程。

     

    ES 的基本概念
    索引 (Index)
    ES 将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于 SQL 中的一个数据库,或者一个数据存储方案 (schema) 。索引由其名称 ( 必须为全小写字符 ) 进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个 ES 集群中可以按需创建任意数目的索引。

    类型 (Type)
    类型是索引内部的逻辑分区 (category/partition) ,然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型 (type) 。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于 “ 表 ” 。

    文档 (Document)
    文档是 Lucene 索引和搜索的原子单位,它是包含了一个或多个域的容器,基于 JSON 格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为 “ 多值域 ” 。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。
    映射 (Mapping)
    ES 中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成 token 、哪些 token 应该被过滤掉,以及哪些文本需要进行额外处理等等。另外, ES 还提供了额外功能,例如将域中的内容按需排序。事实上, ES 也能自动根据其值确定域的类型。
                     


    节点 (Node)
   运行了单个实例的 ES 主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机 Marvel 字符名称。用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。节点通过为其配置的ES集群名称确定其所要加入的集群。
    分片 (Shard) 和副本 (Replica)

   ES 的 “ 分片 (shard)” 机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的 Lucene 索引完成索引数据的分割存储功能,这每一个物理的 Lucene 索引称为一个分片 (shard) 。每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。
    Shard 有两种类型: primary 和 replica ,即主 shard 及副本 shard 。 Primary shard 用于文档存储,每个新的索引会自动创建 5 个 Primary shard ,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其 Primary shard 的数量将不可更改。Replica shard 是 Primary Shard 的副本,用于冗余数据及提高搜索性能。每个
Primary shard 默认配置了一个Replica shard ,但也可以配置多个,且其数量可动态更改。 ES 会根据需要自动增加或减少这些 Replica shard 的数量。ES 集群可由多个节点组成,各 Shard 分布式地存储于这些节点上。ES 可自动在节点间按需要移动 shard ,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。
与ElasticSearch 集群交互时,其输出数据均为 JSON 格式,多数情况下,此格式的易读性较差。 cat API 会在交互时以类似于 Linux 上 cat 命令的格式对结果进行逐行输出,因此有着较 JSON 好些的可读性。调用 cat API 仅需要向 “_cat” 资源发起 GET 请求即可。具体使用方法请查阅官方文档。

      另外, ES 集群的 CRUD 操作也非常容易进行,朋友们参考官方文档即可。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: