Elasticsearch 6.2:如何在单一_doc映射中配置父子字段及扩展字段
Elasticsearch 6.x 单类型索引下为Join关系添加专属字段的方案
没问题,我来帮你搞定这个迁移后的字段配置问题!在Elasticsearch 6.x及以后的单类型索引中,我们依然可以通过join字段维护question和answer的父子关系,同时直接在_doc的properties里定义所有需要的字段——不管是两种类型共享的通用字段,还是各自专属的字段。具体配置方式如下:
完整映射示例
{ "mappings": { "_doc": { "properties": { // 维护父子关系的join字段,保持原配置不变 "join_field": { "type": "join", "relations": { "question": "answer" } }, // 通用字段:question和answer都可以使用的字段 "text": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "author": { "type": "keyword" }, // Question专属字段:只有question类型的文档需要填充 "question_title": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "question_created_at": { "type": "date" }, // Answer专属字段:只有answer类型的文档需要填充 "answer_votes": { "type": "integer" }, "answer_accepted": { "type": "boolean" } } } } }
关键说明
- join字段核心作用:它只负责标记文档的类型(question/answer)以及维护父子关联,不会限制字段的使用。
- 字段区分逻辑:不需要为不同类型单独定义子映射,只需要在
properties中列出所有可能的字段即可。写入文档时,question类型的文档只填充它的专属字段+通用字段,answer类型同理,Elasticsearch会自动忽略文档中不存在的字段定义。 - 严格模式可选:如果担心字段乱添加,可以在
_doc下添加"dynamic": "strict",这样所有字段必须提前在映射中定义,避免非法字段写入。
文档写入示例
写入Question文档
{ "join_field": "question", "text": "如何在ES中配置join字段的专属属性?", "author": "Neelam Mamtani", "question_title": "ES Join字段专属属性配置", "question_created_at": "2024-05-20T10:00:00Z" }
写入关联的Answer文档
{ "join_field": { "name": "answer", "parent": "question文档的_id" }, "text": "直接在_doc的properties里定义所有字段即可...", "author": "回答者", "answer_votes": 5, "answer_accepted": true }
这样配置后,既符合ES6.x单类型的要求,又能完美区分question和answer的专属字段,同时保留父子关系的功能。
内容的提问来源于stack exchange,提问作者Neelam Mamtani
相关产品推荐
相关产品推荐

