ES 映射-Mapping

ES 的 文档字段 也是有类型存在的

不同类型的索引方式不同

{
    "broker": {  // 索引
        "mappings": { // 指定映射
            "properties": { // 字段
                "name": { 
                    "type": "text", // 类型
                    "fields": {   // 参数
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "birthdate": {
                    "type": "date"
                }
            }
        }
    }
}

类型

类型 数据类型 描述
text 字符串 会分词的文本,(通常以人类容易识别的语言书写,因为有语言处理机制,阿拉伯语、亚美尼亚语、巴斯克语、巴西语、保加利亚语、加泰罗尼亚语、中文······),例如一个推文的内容或一封邮件的内容。分析器 负责分析数据,建立倒排索引
keyword 字符串 不分词的文本,区分小大写,完全匹配
long 整数 -
integer 整数 -
short 整数 -
byte 整数 -
float 浮点数 -
double 浮点数 -
scaled_float 浮点数 用来存钱的,有固定小数位(指定 scaling_factor 参数为100,保留两位小数,这个参数本质的设定是为了节省存储空间)
boolean 布尔型 -
date 日期 -
Array 数组 根据存储的数据设置类型
binary 二进制 数据不能包含\n,不参与搜索
nested 嵌套 可做子查询的object
object object 直接指定 properties 来描述内部属性
join ??? 在同一索引下建立 父子关系 parent/child,比较复杂,可能需要聚合 和高级查询知识,和分析使用场景。
Completion 快速搜索建议 准确说它不是一个类型

分词解析
API:GET /_analyze

{
  "analyzer": "standard",
  "text": "35f142de-2931-431d-b939-111111111111"
}

参数

参数 名称 描述
analyzer 分析器 语言分析分词,一般采用默认 standard ,如果需要分析英文 使用 english
normalizer 指定 keyword 的一些查询逻辑,比如查询是否区分大小写
boost 在评分性查询中,增加字段的评分比重
coerce 数字强制 一个bool设置,默认为true,把传入的"5"自动转化成5,false 请求将被拒绝
copy_to 复制字段值 把某一字段中的值 复制到 其他一或多个字段中去,只能用来查询,不能用来显示
doc_values 关闭分词索引 默认true,false后 该字段不再建立分词索引,节省磁盘空间(最好用在排序和聚合字段)
dynamic 是否开启自动映射 默认为true
enablededit 禁用子对象解析映射
format 日期格式化
ignore_above 字符串最大长度 大于该长度的字符串将被忽略
ignore_malformed 忽略数据类型异常 默认false
index 是否为该字段 做查询索引 默认true
index_options 指定倒排索引模式
index_prefixes 指定数据前缀关键词,加速 term 查询
fields 把一个字段 处理成 多个字段 用来做不同的查询或聚合
null_value 处理null值 将null处理成想要的数据形式,方便查询或显示(处理前后 数据类型要一致)
properties 映射指定子字段
search_analyzer 指定查询时候的语言分析器

dynamic

为false 手动添加映射后,是否影响查询?

true 新检测到的字段将添加到映射中。(默认)
false 新检测到的字段将被忽略。这些字段不会被编入索引,因此无法搜索,但仍会出现在_source返回的匹配字段中。这些字段不会添加到映射中,必须显式添加新字段。
strict 如果检测到新字段,则抛出异常并拒绝该文档。必须将新字段显式添加到映射中。

数据模型

type Broker struct {
    Name             string    `json:"name"`
    Phone            string    `json:"phone"`
    Birthdate        time.Time `json:"birthdate"`        // 出生日期
    Age              int       `json:"age"`              // 年龄
    Weight           float32   `json:"weight"`           // 身高
    Motto            string    `json:"motto"`            // 个性签名
    Income           float64   `json:"income"`           // 收入
    IsAuthentication bool      `json:"isAuthentication"` // 是否认证
    City             string    `json:"city"`             // 城市
    CompanyId        uuid.UUID `json:"companyId"`        // 公司Id
    Company          string    `json:"company"`          // 公司
    Interests        []string  `json:"interests"`        // 兴趣爱好
    Resumes          []Resume  `json:"resumes"`          // 入职履历
    Logins           []Login   `json:"logins"`           // 入职履历
    Created          time.Time `json:"created"`          // 创建时间
}

创建索引指定的映射

{
    "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 1
    },
    "mappings": {
        "properties": {
            "name": {
                "type": "keyword"
            },
            "phone": {
                "type": "keyword"
            },
            "birthdate": {
                "type": "date",
                "format": "yyyy-MM-dd"
            },
            "age": {
                "type": "long"
            },
            "weight": {
                "type": "float"
            },
            "motto": {
                "type": "text"
            },
            "income": {
                "type": "scaled_float",
                "scaling_factor": 100
            },
            "isAuthentication": {
                "type": "boolean"
            },
            "city": {
                "type": "keyword"
            },
            "companyId": {
                "type": "keyword"
            },
            "company": {
                "type": "keyword"
            },
            "interests": {
                "type": "text"
            },
            "resumes": {
                "properties": {
                    "city": {
                        "type": "keyword"
                    },
                    "companyId": {
                        "type": "keyword"
                    },
                    "company": {
                        "type": "keyword"
                    }
                }
            },
            "logins": {
                "type": "nested",
                "properties": {
                    "time": {
                        "type": "date"
                    },
                    "port": {
                        "type": "keyword"
                    }
                }
            },
            "created": {
                "type": "date"
            }
        }
    }
}

动态映射的映射结果

{
    "broker": {
        "mappings": {
            "properties": {
                "age": {
                    "type": "long"
                },
                "birthdate": {
                    "type": "date"
                },
                "city": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "company": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "companyId": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "created": {
                    "type": "date"
                },
                "income": {
                    "type": "float"
                },
                "interests": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "isAuthentication": {
                    "type": "boolean"
                },
                "logins": {
                    "properties": {
                        "port": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "time": {
                            "type": "date"
                        }
                    }
                },
                "motto": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "name": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "phone": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "resumes": {
                    "properties": {
                        "city": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "company": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "companyId": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "weight": {
                    "type": "float"
                }
            }
        }
    }
}

指定映射的结果

{
    "broker": {
        "mappings": {
            "properties": {
                "age": {
                    "type": "long"
                },
                "birthdate": {
                    "type": "date",
                    "format": "yyyy-MM-dd"
                },
                "city": {
                    "type": "keyword"
                },
                "company": {
                    "type": "keyword"
                },
                "companyId": {
                    "type": "keyword"
                },
                "created": {
                    "type": "date"
                },
                "income": {
                    "type": "scaled_float",
                    "scaling_factor": 100
                },
                "interests": {
                    "type": "text"
                },
                "isAuthentication": {
                    "type": "boolean"
                },
                "logins": {
                    "type": "nested",
                    "properties": {
                        "port": {
                            "type": "keyword"
                        },
                        "time": {
                            "type": "date"
                        }
                    }
                },
                "motto": {
                    "type": "text"
                },
                "name": {
                    "type": "keyword"
                },
                "phone": {
                    "type": "keyword"
                },
                "resumes": {
                    "properties": {
                        "city": {
                            "type": "keyword"
                        },
                        "company": {
                            "type": "keyword"
                        },
                        "companyId": {
                            "type": "keyword"
                        }
                    }
                },
                "weight": {
                    "type": "float"
                }
            }
        }
    }
}

你可能感兴趣的:(ES 映射-Mapping)