使用场景
- Github使用Elasticsearch检索1300亿行的代码
(想不到吧 哈哈哈)
- 使用模糊搜索功能场景的项目
(这也是为什么用ElasticSearch做搜错存储的原因之一,关系数据对模糊搜索做的不够好)
大部分数据库在提取可用知识方面显得异常无能。它们能够通过时间戳或者精确匹配做过滤,但是它们不能够进行全文搜索,处理同义词和根据相关性给文档打分,不能根据同一份数据生成分析和聚合的结果,最重要的 是,它们在没有大量工作进程(线程)的情况下不能做到对数据的实时处理。
然后,ElasticSearch来了,Elasticsearch鼓励你浏览并利用你的数据,而不是让它烂在数据库里,因为在数据库里查询实在是太难了。
What is ElasticSearch
Elasticsearch 是基于Apache Lucene、一个实时的分布式存储、搜索、分析的引擎。
关系型数据库中table独立(独立存储),在Elastic Search中,采用index(索引)
Elasticsearch使用Java语言开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful. API 来隐藏Lucene的复杂性,从而让全文搜索变得简单。
它的属性
索引
容器,存储映射类型,字段和其他设置。
type(类型): 文档的逻辑容器,在ES 7.0版本后取消了
取消type理由:
- 在关系型数据库中table是独立的(独立存储),但es中同一个index中不同type是存储在同一个索引中的(lucene的索引文件),因此不同type中相同名字的字段的定义(mapping)必须一致。
- 不同类型的“记录”存储在同一个index中,会影响lucene的压缩性能。
- 一个index只存储一种类型的“记录”
文档:
- 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含 key:value!
- 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一个json对象! fastjson进行自动转换!}
- 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个 新的字段。
fields
字段
ElasticSearch 设计
- 物理设计
分片:ES后台将一个索引划分为多个分片。 - 逻辑设计
查找顺序:索引 -> 类型 -> 文档ID
想要继续学习,请看下节:ElasticSearch 学习2