ES支持哪些数据类型,和MySQL之间的映射关系是怎么样的?
Elasticsearch(简称 ES)是一个分布式搜索和分析引擎,支持丰富的数据类型来适应不同场景。MySQL 是一个关系型数据库,两者在数据类型上存在差异,但可以通过映射实现数据同步或集成。下面我将逐步解释 ES 支持的数据类型,然后详细说明与 MySQL 的常见映射关系。回答基于 ES 7.x/8.x 和 MySQL 5.7/8.0 版本
1. Elasticsearch 支持的数据类型
Text:用于存储全文文本数据,如文章或者书籍内容,支持全文搜索分析、分词
- Keyword:用于存储文本值,常用于索引结构化内容,如邮件地址或需要精准查询匹配的内容
- Date:存储日期或者时间,格式如
yyyy-MM-dd HH:mm:ss
。 - Long,Integer,Short,Byte,Double,Float:数值类型
- Boolean:存储
true
或false
。 - Binary:存储二进制数据,如 Base64 编码。
- Object:嵌套 JSON 对象。
- Nested:用于数组中的对象,保持独立性
2. MySQL 常见数据类型
MySQL 作为关系型数据库,数据类型更结构化,常见包括:
- 整数:
INT
、BIGINT
、SMALLINT
、TINYINT
。 - 浮点数:
FLOAT
、DOUBLE
、DECIMAL
(精确小数)。 - 字符串:
VARCHAR
(变长字符串)、CHAR
(定长字符串)、TEXT
(长文本)。 - 日期时间:
DATE
、DATETIME
、TIMESTAMP
。 - 布尔:
BOOLEAN
(或TINYINT(1)
模拟)。 - 二进制:
BLOB
、BINARY
。
3. ES 与 MySQL 的数据类型映射关系
Mysql类型 | Elasticsearch 类型 | 说明 |
VARCHAR | text,keyword | 根据是否需要全文检索或精准检索,选择使用text或者keyword |
CHAR | keyword | 用于存储较短,不长变化的字段 |
BLOB/TEXT | text | 大文本块使用text类型,支持全文检索 |
INT,BINT | long | 多数整数类型映射为long,以支持更大的数值 |
TINT | byte | 较小的整数可以映射为byte |
DECIMAL,FLOAT,DOUBLE | double,float | 根据精准度选择double和float |
DATE,DATETIME,TIMESTAMP | date | 所有的时间类型都可以映射为date |
TININT(1) | boolean |
4.拓展
text和keyword的区别?
text类型被设计用于全文搜索,意味着文本被存储为text类型时,ES会对其进行分词,把文本分解为单独的词语或短语,便于搜索引擎进行全文检索。
适用于存储需要进行全文检索的内容,产品描述,任务描述等
keyword类型是精准值匹配,不进行分词处理,作为整体存储,适用于计数、求和、过滤和排序操作。