elasticsearch - ES 不区分大小写的布尔字段
问题描述
我有 1m 记录,其中一列是布尔值。它包含三个值。FALSE, TRUE, [Blank]
.
我希望将此字段视为布尔值。由于这种情况,它不被视为布尔值。我知道 ES 支持 true 或 "true" 作为布尔值,并且没有分析器。
有没有其他方法可以处理我的记录?记录也是动态的。当负载到达时,它必须被适当地存储。
解决方案
是的,有一种方法可以使用转换您的领域的摄取管道来实现这一点。
您可以使用如下所示的convert
处理器创建摄取管道。转换为布尔值时,转换处理器忽略大小写,因此"TRUE"
将转换为 true。对"FALSE"
. 添加ignore_missing: true
忽略空值:
PUT _ingest/pipeline/bool-pipeline
{
"description": "converts FALSE/TRUE to boolean",
"processors" : [
{
"convert" : {
"field" : "bool",
"type": "boolean",
"ignore_missing": true
}
}
]
}
然后,当您索引文档时,您只需在查询中指定管道,文档将bool-pipeline
在被索引之前流过。
PUT index/_doc/123?pipeline=bool-pipeline
{
"bool": "TRUE"
}
PUT index/_doc/456?pipeline=bool-pipeline
{
"bool": "FALSE"
}
PUT index/_doc/789?pipeline=bool-pipeline
{
"bool": null
}
推荐阅读
- asp.net-identity - 使用 ASP.NET Identity 或 Identity Server 4 使用本机应用程序进行 Facebook 登录
- python - 如何在 python 中保存类和函数以供通用使用
- pandas - 在 Pandas 中对时间序列数据进行子集化的正确方法是什么?
- c - 如何在 C 语言中打印具有不同颜色的命令的标准输出和标准错误
- apache-spark - Spark:如何将对rdd保存到json文件?
- javascript - 进入时 Quilljs 不创建新行
- ios - 未选中时 SwfitUI 选项卡视图图像填充
- python - python3 numpy.setdiff1d - 使用 dict_keys 而不是列表的错误结果
- swift - 对于 firebase 规则,为什么权限在 uid 级别被拒绝?
- java - Sleuth traceId 和 spanId 不会传播到 parallelStream 工作线程