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類型是精準值匹配,不進行分詞處理,作為整體存儲,適用于計數、求和、過濾和排序操作。