【问题标题】:How can I script a field in Kibana that matches first 4 digits of a field?如何在 Kibana 中编写一个匹配字段前 4 位数字的字段?
【发布时间】:2020-10-29 18:54:51
【问题描述】:

我的语法学习曲线陡峭,而且我的数据有 PII,所以我不知道如何描述更多。

我需要在 kibana 中已编入索引的文档中添加一个新字段。该字段“C”将是字段“A”的前 4 位数字的组合,该字段包含数以百万计的数字并且类型为:关键字,而字段“B”的类型为:关键字并且是一些大数字。 稍后我将使用这个独特组合的字段“C”与项目列表/数组进行比较(我将在 Kibana 的查询 DSL 中插入列表,因为我需要使用返回的文档构建一些可视化和报告)。 我看到我可以使用 painless 来创建这个新字段,但我不知道是否需要使用正则表达式以及如何使用。

编辑:

根据要求,通过具体示例获取有关映射的更多信息。

"fieldA" : {
        "type: "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
           }
          }
        },
"fieldB" : {
        "type: "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
           }
          }
        },

值示例: 字段A = "9876443320134", 字段B =“000000001”。 我想将 FieldA 的前 4 位数字和 FieldB 的全部内容相加。 FieldC 将产生“9877”的值。

【问题讨论】:

  • 请用具体例子代替。
  • 嗨@Joe,刚刚编辑。希望我可以提供一个具体的映射示例。提前致谢!

标签: elasticsearch kibana


【解决方案1】:

原始查询可能如下所示:

GET combination_index/_search
{
  "script_fields": {
    "a+b": {
      "script": {
        "source": """
          def a = doc['fieldA.keyword'].value;
          def b = doc['fieldB.keyword'].value;
          
          if (a == null || b == null) {
            return null
          }
          
          def parsed_a = new BigInteger(a);
          def parsed_b = new BigInteger(b);
          
          return  new BigInteger(parsed_a.toString().substring(0, 4)) + parsed_b;
        """
      }
    }
  }
}

注意 1:我们将字符串解析为 BigInteger b/c 看似不足的 Integer.MAX_VALUE

注意 2:我们首先解析 fieldA,然后再对其调用 .toString,以处理 fieldA 的边缘情况,例如 009876443320134。假设您要查找的是9876,而不是98,这是先调用.substring,然后解析的结果。


如果您打算在 Kibana 可视化中使用它,您首先需要一个索引模式。一旦你有了一个,你可以按照以下步骤进行:

然后将脚本放入:

点击保存,新的脚本在数字聚合和查询中可用:

【讨论】:

  • 嗨@Joe,感谢您的回答。我今天试试,稍后在这里回复。
  • 这个运气好吗?
  • 抱歉耽搁了乔,有一些健康问题。我将您的答案标记为已接受,因为它对我有所帮助。谢谢!
  • 不用担心,很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多