Elasticsearch使用脚本处理Boolean类型字段

Elasticsearch中使用groovy脚本获取文档的boolean字段值时,

 (2.x版本以上)

得到的值是字符的 1 或者 1 ,而不是bool值 true 和 false 。

比如文档中有一个字段是

{
  "accessed":true
}

然后用这个字段判断时候得写成

 "script_score": {
            "script": "return doc['accepted'].value == 1 ? 20 : 10"
          }


<think>好的,我现在需要解释Elasticsearch中的布尔类型。首先,要确认用户是否了解基本的数据类型概念。布尔类型通常指true或false的值,但在ES中可能有不同的处理方式。 接下来,用户可能想知道ES如何存储和索引布尔字段。需要回忆ES的文档,布尔类型ES 5.0版本之后被引入,之前是用字符串或数值代替。现在ES的布尔字段可以接受true/false,或者字符串形式的"true"/"false",以及数值的1/0。存储时会转换为布尔值。 还要考虑映射的定义方式,用户可能在创建索引时如何指定布尔类型。比如使用"type": "boolean"。同时,查询时的注意事项,比如term查询需要用true/false,而不是字符串或数字。 另外,聚合和脚本中的使用是否有特别之处?比如在聚合结果中布尔值会显示为t和f。可能需要提到这点。 还要注意可能出现的常见问题,比如错误地使用字符串导致查询不匹配,或者旧版本ES的兼容性问题。是否需要建议显式声明映射而不是依赖动态映射? 最后,是否需要举例说明如何创建映射、插入文档和查询?这样用户能更直观地理解。确保步骤清晰,语法正确,使用中文解释每个部分的作用。</think>Elasticsearch中的布尔类型boolean)是用于存储`true`/`false`逻辑值的基础数据类型。以下是其核心特点和使用方法: --- ### **一、定义方式** 在创建索引映射时,显式声明字段类型为`boolean`: ```json PUT /my_index { "mappings": { "properties": { "is_active": { "type": "boolean" } } } } ``` --- ### **二、接受的输入值** Elasticsearch会自动转换以下输入为布尔值: - **直接布尔值**: `true` / `false` - **字符串**: `"true"` / `"false"`(严格小写) - **数字**: `0`(视为`false`) / `非0`(视为`true`,如`1`) --- ### **三、存储与索引行为** - **存储形式**: 最终统一保存为`true`或`false` - **倒排索引**: 布尔字段默认会被索引,支持快速查询(如`term`查询) --- ### **四、查询示例** #### 1. 精确匹配查询 ```json GET /my_index/_search { "query": { "term": { "is_active": true } } } ``` #### 2. 聚合统计 ```json GET /my_index/_search { "aggs": { "active_stats": { "terms": { "field": "is_active" } } } } ``` 返回结果中会显示`true`和`false`的分布情况。 --- ### **五、注意事项** 1. **动态映射风险** 若未显式定义映射,Elasticsearch可能根据输入值推断为`boolean`或`text`类型。建议主动定义映射。 2. **脚本处理** 在Painless脚本中可直接使用布尔值: ```json "script": { "source": "doc['is_active'].value == true" } ``` 3. **历史版本兼容性** Elasticsearch 5.0之前版本没有专用布尔类型,需用`"type": "keyword"`配合`"true"/"false"`字符串代替。 --- ### **六、典型应用场景** - 标记状态(如用户是否激活、商品是否上架) - 开关配置(如功能启用/禁用) - 二分类数据过滤 通过合理使用布尔类型,可有效提升查询效率和存储空间利用率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值