首页 > 解决方案 > ES 不区分大小写的布尔字段

问题描述

我有 1m 记录,其中一列是布尔值。它包含三个值。FALSE, TRUE, [Blank].

我希望将此字段视为布尔值。由于这种情况,它不被视为布尔值。我知道 ES 支持 true 或 "true" 作为布尔值,并且没有分析器。

有没有其他方法可以处理我的记录?记录也是动态的。当负载到达时,它必须被适当地存储。

标签: elasticsearch

解决方案


是的,有一种方法可以使用转换您的领域的摄取管道来实现这一点。

您可以使用如下所示的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
}

推荐阅读