elastic serach学习


1.什么是 elastic search

  • Elasticsearch是一款开源的全文搜索与分析引擎,它拥有高扩展、大容量数据的存储和处理特性,有着近乎实时的处理效果。elasticsearch的使用场景还是比较多的,比如 APP 的搜索服务、ELK 实现日志收集与分析、BI 商业智能等。
1.1 基础概念
  • 近实时
    什么是近实时?
    它表示一个文档从被索引(存储使文档可搜索)到真正能被搜索之间有一个短暂的延迟,而非实时,这个延迟默认是 1 秒。当然,默认延迟可以修改的。
  • 集群
    集群是节点的集合。
    集群实现了在多节点上进行大容量数据存储和搜索的能力。每个集群都拥有唯一名称,而节点正是根据集群的名称决定是否加入某个集群。不同环境的集群的名称不能相同,如开发、测试、线上三套环境,集群可分别命名为 logging-dev、logging-test、logging-prod。
  • 节点
    节点,集群组成的一部分,负责具体的事务处理,比如数据存储、文档索引、搜索执行等。节点也有唯一个名称,如果没有指定将随机生成。
    节点可通过配置集群名称,指定加入哪个集群,节点默认的集群名称是 elasticsearch。如果我们在一个网络环境下启动多个节点,并且它们之间可以相互发现,就将会自动组织一个名称为 elasticsearch 的集群。
  • 索引
    索引是一系列相似文档的集合,例如,我们把客户信息存放到一个索引,订单信息存储到另一个索引中。索引可通过名称识别,名称必须小写。当操作文档时,我们需要通过索引名称指定。
    索引的数量,集群中并没有限制定义索引的数量。
  • 类型
    elastic search 6.0 已丢弃功能。
    有一点需要注意,为与老版本兼容,该功能暂未彻底移除,当前一个索引仍可设置类型,但当前只能指定一个类型。一般情况下,我们设置一个固定 type 即可,比如 _doc。
  • 文档
    被索引的基础信息单元,比如一个客户、一件产品、或是一笔订单。文档可用 JSON 形式表示,它是一种非常普遍的数据交换格式。索引中,我们可以存放任意数量的文档。
  • 分片与副本
    分片和副本是 elasticsearch 非常核心的概念。
    我们知道,elasticsearch 存储的数据量能突破单个硬件的限制,数据处理速度有着近实时的水平。这些都和分片和副本有着很大关系。
    分片实现了索引文档分散分布,并且每个切片都是功能完善的,索引是独立的,可能分布在集群中的任意节点。分片的重要性主要体现在使 elasticsearch 存储容量的水平扩展和分布式并行处理都成为了现实。
    副本提高了 elasticsearch 的容错能力。网络环境下,异常随时可能发生,比如一些节点或分片从网络中消失。一旦设置了副本,索引就会同时拥有主分片和副本分片。一旦某个分片发生异常,还有其他分片可替代。而且,副本也可以提高请求的处理速度,一个分片上的副本可同时并行处理多个请求。
    一句话简述,每个索引可以由多个分片组成,而每个分片也可以拥有多个副本

2.为什么要用elastic search

  • 相对于数据库,Elasticsearch的强大之处就是可以模糊查询。
  • 数据库like模糊查询是不走索引的,不走索引意味着:只要你的数据库的量很大(1亿条),你的查询肯定会是秒级别的。而且,即便给你从数据库根据模糊匹配查出相应的记录了,那往往会返回大量的数据给你,往往你需要的数据量并没有这么多,可能50条记录就足够了。而Elasticsearch是专门做搜索的,就是为了解决上面所讲的问题而生的,换句话说:Elasticsearch对模糊搜索非常擅长(搜索速度很快)从Elasticsearch搜索到的数据可以根据评分过滤掉大部分的,只要返回评分高的给用户就好了(原生就支持排序)没有那么准确的关键字也能搜出相关的结果(能匹配有相关性的记录)

2.1 Elastic search的数据结构

  • Elastic search 使用一种称为 倒排索引
    的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
    在这里插入图片描述
  • 写入数据到Elasticsearch的时候会进行分词

在这里插入图片描述

  • 我们输入一段文字,Elasticsearch会根据分词器对我们的那段文字进行分词(也就是图上所看到的Ada/Allen/Sara…),这些分词汇总起来我们叫做Term Dictionary,而我们需要通过分词找到对应的记录,这些文档ID保存在PostingList
  • 在Term Dictionary中的词由于是非常非常多的,所以我们会为其进行排序,等要查找的时候就可以通过二分来查,不需要遍历整个Term
    Dictionary
  • 由于Term Dictionary的词实在太多了,不可能把Term
    Dictionary所有的词都放在内存中,于是Elasticsearch还抽了一层叫做Term Index,这层只存储 部分 词的前缀,Term Index会存在内存中(检索会特别快)
2.2 Elastic search内置了一些分词器

Standard Analyzer 。按词切分,将词小写
Simple Analyzer。按非字母过滤(符号被过滤掉),将词小写
WhitespaceAnalyzer。按照空格切分,不转小写

2.3 Elastic search分词器主要由三部分组成:

Character Filters(文本过滤器,去除HTML)
Tokenizer(按照规则切分,比如空格)
TokenFilter(将切分后的词进行处理,比如转成小写)

3.怎么使用Elastic search

  • 学会 elasticsearch 安装与启动,同时为了便于测试,顺带也介绍了 Kibana 的安装启动;
  • 探索集群,介绍集群涉及的一些基础操作,比如健康状态检查、集群节点检查,索引创建等;
  • 更新数据,包括如何进行文档替换、更新,以及如何进行删除,最后通过批处理可以将多个操作组合起来;
  • 数据探索,主要是与搜索和聚合分析相关,介绍了常用的一些搜索 API、Query DSL 和聚合 API 的使用;

未完,待补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值