PListBuddy添加嵌套字段

本文详细介绍了如何使用PlistBuddy在mac应用的Info.plist配置文件中添加和管理嵌套字段,如CFURLSchemes的dict结构。通过一步步操作演示了如何添加、删除及维护这些复杂的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PlistBuddy中添加嵌套字段

PListBuddy

Info.plist是mac应用中的配置文件,官方定义是"属性列表是一种构建系统可以在运行时访问的任意数据的方法。信息属性列表是一种特殊类型的属性列表,其中包含包的配置数据。文件中的键和值描述了要应用于包的各种行为和配置选项."这边不作详细介绍(文末有apple官方文档链接),本文只针对Plist文件中添加嵌套字段的操作方法。

PlistBuddy的使用

PlistBuddy 是mac系统自带的plist文件编辑工具,PlistBuddy -help可查看帮助文档。plist文件中包含dict、array、string等类型。普通的添加字段在别的博文中都有过介绍,这里只分享在嵌套字段的添加:例如CFURLSchemes,它是放置在Array中的dict中的属性值.
具体属性的含义: https://www.cnblogs.com/xiao-love-meng/p/5896479.html

  1. Info.plist 帮助
    /usr/libexec/PlistBuddy -help
    在这里插入图片描述

  2. 查看Info.plist
    /usr/libexec/PlistBuddy -c "print" Info.plist

  3. 添加嵌套字段

/usr/libexec/PlistBuddy -c 'Add :CFBundleURLTypes Array ' $plistpath #增加CFBundleURLTypes数组
/usr/libexec/PlistBuddy -c 'Add :CFBundleURLTypes:0:CFBundleURLName string ' $plistpath #在item0增加string字段
/usr/libexec/PlistBuddy -c 'Add :CFBundleURLTypes:0:CFBundleURLSchemes Array ' $plistpath #在item 0增加Array字段
/usr/libexec/PlistBuddy -c 'Add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string Appname' $plistpath #在嵌套array中添加值
  1. 删除
    /usr/libexec/PlistBuddy -c 'Delete :CFBundleURLTypes' $plistpath
<think>好的,我现在需要处理用户关于Elasticsearch嵌套字段的使用指南和查询示例的问题。首先,我得回忆一下Elasticsearch中嵌套字段的相关知识。用户提到了引用[1]和引用[2],里面提到了嵌套字段的聚合和查询方法。 首先,嵌套类型(nested)在Elasticsearch中用于处理对象数组,因为默认情况下,ES会将对象数组扁平化,导致各个对象之间的关联丢失。比如,如果一个文档里有多个用户对象,每个用户有姓名和年龄,扁平化后查询可能会跨不同用户对象匹配,这不符合预期。所以需要使用nested类型来保持每个对象的独立性。 接下来,用户需要的是使用指南和查询示例。使用指南应该包括如何定义嵌套字段的映射,如何进行正确的查询和聚合。根据引用[1],聚合需要使用nested聚合类型,而引用[2]给出了一个嵌套查询的示例。因此,我需要分步骤说明映射定义、查询方法、聚合方法以及可能需要注意的地方,比如父子文档和性能影响。 然后,用户可能想知道如何创建嵌套类型的映射。这需要在创建索引时明确指定字段类型为nested,否则ES默认会处理成对象类型。例如,在mapping中定义"user"字段为"type": "nested"。 查询部分,用户需要知道如何使用nested查询。根据引用[2],示例中的查询使用了nested path,并指定了查询条件。我需要解释这个结构,包括path、query内部如何编,以及可能的过滤条件。 聚合部分,引用[1]提到需要使用nested聚合,然后在其下进行子聚合。比如,先定义一个nested聚合指向嵌套字段的路径,然后在里面进行terms聚合或其他操作。需要注意聚合的层次结构,否则结果可能不正确。 此外,可能还需要提到嵌套字段的限制,比如性能问题,因为每个嵌套文档都是独立的文档,会增加索引和查询的开销。还要提到处理嵌套字段更新时的注意事项,可能需要重新索引整个文档。 最后,生成相关问题需要考虑用户可能的后续疑问,比如性能优化、嵌套与父子文档的区别、如何更新嵌套字段等。确保问题覆盖常见的使用场景和潜在问题。</think>### Elasticsearch嵌套字段使用指南 #### 1. 嵌套字段的定义 Elasticsearch默认将对象数组**扁平化**,导致多个嵌套对象之间的边界丢失。例如: ```json { "user": [ {"name": "张三", "age": 25}, {"name": "李四", "age": 30} ] } ``` 默认映射下,查询`name=张三 AND age=30`会错误匹配。需显式声明为嵌套类型: ```json PUT /example { "mappings": { "properties": { "user": { "type": "nested" // 关键定义[^2] } } } } ``` #### 2. 嵌套查询语法 使用`nested`查询结构精确匹配嵌套对象: ```json GET /example/_search { "query": { "nested": { "path": "user", "query": { "bool": { "must": [ { "term": { "user.name.keyword": "李四" }}, { "range": { "user.age": { "gte": 28 }}} ] } } } } } ``` - `path`指定嵌套字段层级 - 查询条件必须**完全匹配单个嵌套对象**[^2] #### 3. 嵌套聚合操作 ```json GET /example/_search { "aggs": { "user_agg": { "nested": { "path": "user" }, // 第一步进入嵌套层[^1] "aggs": { "age_stats": { "stats": { "field": "user.age" } } } } } } ``` - 必须通过`nested`聚合进入嵌套上下文 - 后续子聚合才能访问嵌套字段的真实值 #### 4. 重要注意事项 | 特性 | 说明 | |---------------------|-----------------------------| | 入性能 | 嵌套文档会增加40%的索引开销 | | 更新限制 | 必须替换整个父文档 | | 最大嵌套深度 | 默认50层(可通过`index.mapping.nested_fields.limit`调整)| | 与父子文档区别 | 嵌套文档与父文档存储在同一分片,父子文档可独立更新 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值