图片.png
图片.png
object类型:
处理JSON对象,比如一个文档中的嵌套对象。例如,用户信息中的地址可能包含省、市、街道等字段,这时候可以用object类型。不过,object类型在处理数组对象时,会将数组中的每个对象合并,导致无法单独查询数组中的某个元素。例如,用户可能有多个地址,如果使用object类型,查询时可能会得到不正确的结果,因为Elasticsearch会将所有字段展开,导致数据混合。
nested类型:
处理对象数组,每个数组元素作为独立的文档存储,这样每个元素可以独立查询。例如,订单中的商品列表,每个商品可能有多个属性,使用nested类型可以确保每个商品的信息被独立索引,查询时可以精确匹配某个商品的属性,而不会与其他商品混淆。
flattened类型:
处理动态或未知结构的字段,将整个JSON对象存储为键值对,避免字段爆炸。例如,日志数据中的元数据可能有各种动态字段,使用flattened类型可以避免字段过多导致索引压力过大,同时保留数据的结构化信息。不过,这种类型不支持复杂的查询,比如全文搜索,因为所有值都被视为关键字。
图片.png
图片.png
五、数组与多字段特性
数组支持 ES不专门定义数组类型,任何字段都可包含多个值(但需保证类型一致):
"tags": ["elasticsearch", "database", "nosql"] // keyword数组
多字段映射 (Multi-fields) 单个字段支持多种数据类型处理(常见于text与keyword组合):
"title": {
"type": "text", // 全文搜索
"fields": {
"keyword": {
"type": "keyword" // 精确匹配
}
}
}
六、选型建议
文本处理
需要分词搜索 → text + 分词器(如ik_smart)
需要精确匹配 → keyword
数值处理
根据范围选择最小类型(如byte > short > integer > long)
嵌套关系
对象数组需独立查询 → nested
仅存储不查询 → object
特殊需求
IP分析 → ip
自动补全 → completion












网友评论