一级分类 | 二级分类 | 具体类型 |
---|---|---|
基础类型 | 字符串类型 | text, keyword |
整数类型 | integer, long, short, byte | |
浮点类型 | double, float, half_float, scaled_float | |
逻辑类型 | boolean | |
日期类型 | date | |
范围类型 | range | |
二进制类型 | binary | |
复合类型 | 数组类型 | array |
对象类型 | object | |
嵌套类型 | nested | |
特殊类型 | 坐标类型 | geo_point |
IP类型 | ip | |
范围类型 | completion | |
令牌计数类型 | token_count | |
附件类型 | attachment | |
抽取类型 | percolator |
基础类型
text类型
text取代了string,当一个字段需要全文搜索的时候,比如邮件内容,产品描述,应该使用text类型。
设置text类型后,字段内容会被分析,生成倒排索引以前,字符串会被分析器分成单个词项。
text类型字段不用于排序,很少用于聚合(termsAggregation)除外。
PUT /my_index
{
"mappings":{
"properties":{
"full_name": {
"type":"text"
}
}
}
}
keyword类型
keyword类型适用于索引结构化字段,比如邮件地址、主机名、状态码、标签等。
字段多用于需要进行过滤、排序、聚合的场景。keyword类型字段只能通过精确值搜索到。
date类型
JSON中没有日期类型,所以在ES中,我们可以自己定义日期类型格式
PUT /my_index
{
"mappings": {
"properties": {
"created_time": {
"type":"date",
"format":"yyyy-mm-dd HH:mm:ss"
}
}
}
}
object类型
JSON天生具有层级关系,文档会包含嵌套的对象。
array类型
在ES中,没有专门的Array数组类型。
但是在默认的情况下,任意一个字段都可以包含0个或多个值,这意味着每个字段的默认都是数组类型。在同一个数组中,数组元素的数据类型是相同的。
ES不支持元素为多个数据类型。常用的数组类型
[1,2,3]
["sport","eat","walk"]
"user":[{"name":"Marry"},{"name":"John"}]
ip类型
ip类型的字段用于存储IPV4或者IPV6的地址
PUT /my_index
{
"mappings": {
"properties": {
"ip_addr": {
"type":"ip"
}
}
}
}