如何将Elasticsearch文档关键词索引为数组类型而非字符串?
实现Elasticsearch关键词字段的数组类型索引
嘿,其实你完全不用纠结——Elasticsearch 原生就支持数组形式的关键词存储,根本不需要修改字段的类型定义!
核心原理
Elasticsearch 并没有专门的「数组数据类型」,任何字段(包括你定义的 keyword 类型)都可以接受单个值或者同类型的数组值。只要数组里的元素类型和字段映射的类型一致,ES 就会自动把数组里的每个元素当作独立的关键词进行索引。
具体操作步骤
保持原有的映射配置
你给出的keyword类型映射完全没问题,不需要做任何修改:PUT my_index { "mappings": { "_doc": { "properties": { "tags": { "type": "keyword" } } } } }插入数组形式的文档
直接在写入文档时传入数组格式的关键词即可,ES 会自动处理:PUT my_index/_doc/1 { "tags": ["key1", "key2", "key3"] }数组关键词的查询
你可以用terms查询来匹配数组中的任意关键词,比如:GET my_index/_search { "query": { "terms": { "tags": ["key1", "key3"] } } }
注意事项
- 数组中的所有元素必须是同一种类型,不能混合字符串、数字等不同类型的值,否则会导致索引失败。
- 对于
keyword类型的数组字段,每个元素都会被当作独立的关键词存储,完全满足你对数组关键词索引的需求。
内容的提问来源于stack exchange,提问作者Saro
相关产品推荐
相关产品推荐

