Elasticsearch如何无需指定前缀直接查询对象子字段?
实现方案
这个需求是可行的,以下是两种具体实现方式:
方案1:使用copy_to字段映射
在定义索引映射时,给a.b字段添加copy_to参数,将其值复制到一个顶级的b字段中,这样直接查询b:b_value就能匹配目标文档。
示例映射配置:
PUT /your_index { "mappings": { "properties": { "a": { "properties": { "b": { "type": "text", "copy_to": "b" }, "c": { "type": "text" } } }, "b": { "type": "text" } } } }
⚠️ 注意:如果索引中已经存在文档,需要重新索引这些文档,才能让copy_to的配置生效。
方案2:使用flattened类型
将整个a字段定义为flattened类型,Elasticsearch会自动扁平化处理这个对象里的所有键值对,此时直接查询b:b_value就能匹配嵌套在a中的b字段。
示例映射配置:
PUT /your_index { "mappings": { "properties": { "a": { "type": "flattened" } } } }
这种方式无需单独配置每个嵌套字段,但flattened类型有一定限制:默认仅支持精确匹配(不支持分词)、无法对嵌套字段做聚合操作,适合只需要简单查询嵌套字段的场景。同样,已存在的文档需要重新索引才能应用该映射。
内容的提问来源于stack exchange,提问作者klin
相关产品推荐
相关产品推荐

