参考:https://my.oschina.net/u/4337264/blog/3454755
https://blog.csdn.net/u012211603/article/details/84163313?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-84163313-blog-108235285.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-84163313-blog-108235285.pc_relevant_paycolumn_v3&utm_relevant_index=1
关系型数据库和ES对比
| 关系型数据库 | es |
|---|---|
| 数据库 | 索引index |
| 表 | 类型type |
| 行 | 文档document |
| 字段 | 属性field |
Elasticsearch 近实时,延迟(通常是1秒内)。
索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。如订单索引、商品索引、客户索引。。。
类型(type)
类型是索引的一个逻辑上的分类/分区,一组共同字段的文档定义一个类型。
NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用,但是不推荐,在7~8.x版本中彻底移除一个索引中创建多个类型。
映射(Mapping)
Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema,用于定义一个索引(index)中的类型(type)的数据的结构。 在ES中,我们可以手动创建type(相当于table)和mapping(相关与schema),也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。 mapping中主要包括字段名、字段数据类型和字段索引类型。
文档(document)
一个文档是一个可被索引的基础信息单元,类似于表中的一条记录。比如,你可以拥有某一个员工的文档,也可以拥有某个商品的一个文档。文档以采用了轻量级的数据交换格式JSON(Javascript Object Notation)来表示。
- json object,由字段(field)组成,常见数据类型如下:
- 字符串:text,keyword
- 数值型:long,integer,short,byte,double,float,half_float,scaled_float
- 布尔:boolean
- 日期:date
- 二进制:binary
- 范围类型:integer_range,float_range,long_range,double_range,date_range
- 每个文档有唯一的id标识
- 自行指定
- es自动生成
节点node
一个Elasticsearch的运行实例,是集群的构成单元
集群Cluster
由一个或多个节点组成,对外提供服务
索引
正排索引与倒排索引
- 正排索引
- 文档id到文档内容、单词的关联关系
- 倒排索引
- 单词到文档id的关联关系 | 单词 | 文档ID列表 | | —- | —- | | elasticsearch | 1 | | 流行 | 1 | | 搜索引擎 | 1,3 | | 世界 | 2 |
倒排索引详解
- 倒排索引是搜索引擎的核心,主要包含两部分:
- 单词字典(Term Dictionary)
- 倒排列表(Posting List)
es存储的是一个json格式的文档,其中包含多个字段,每个字段会有自己的倒排索引
单词词典
单词字典(Term Dictionary)是倒排索引的重要组成部分
- 记录所有文档的单词,一般都比较大
- 记录单词到倒排列表的关联信息
-
倒排列表
倒排列表记录了单词对应的文档集合,由倒排索引项组成
- 倒排索引项主要包含如下信息:
- 文档ID,用于获取原始信息
- 单词频率,记录该单词在该文档中的出现次数,用于后续相关性算分
- 位置,记录单词在该文档中的分词位置(多个),用于做词语搜索
- 偏移,记录单词在文档的开始和结束位置,用于做高亮显示
数据类型
- 核心数据类型
- 字符串:text,keyword
- 数值型:long,integer,short,byte,double,float,half_float,scaled_float
- 布尔:boolean
- 日期:date
- 二进制:binary
- 范围类型:integer_range,float_range,long_range,double_range,date_range
- 复杂数据类型
- 数组类型array
- 对象类型object
- 嵌套类型nested object
- 地理位置数据类型
- geo_point
- geo_shape
- 专用类型
- 记录ip地址ip
- 实现自动补全completion
- 记录分词数token_count
- 记录字符串hash值murmur3
- percolator
- join
- 多字段特性
