elasticsearch 如何在“Elasticsearch”中将某些字段值视为null`,elasticsearch,elasticsearch" /> elasticsearch 如何在“Elasticsearch”中将某些字段值视为null`,elasticsearch,elasticsearch" />

elasticsearch 如何在“Elasticsearch”中将某些字段值视为null`

elasticsearch 如何在“Elasticsearch”中将某些字段值视为null`,elasticsearch,elasticsearch,我正在解析日志文件,为了简单起见,假设日志文件的格式如下: {"message": "hello world", "size": 100, "forward-to": 127.0.0.1} 我正在将这些行索引到一个Elasticsearch索引中,在这里我定义了一个自定义映射,使得消息、大小和转发到分别属于文本、整数和ip类型。但是,某些日志行将如下所示: {"message": "hello world", "size": "-", "forward-to": ""} { "mappi

我正在解析日志文件,为了简单起见,假设日志文件的格式如下:

{"message": "hello world", "size": 100, "forward-to": 127.0.0.1}
我正在将这些行索引到一个Elasticsearch索引中,在这里我定义了一个自定义映射,使得
消息
大小
转发到
分别属于
文本
整数
ip
类型。但是,某些日志行将如下所示:

{"message": "hello world", "size": "-", "forward-to": ""}
{
  "mappings": {
    "my_mapping_name": {
      "properties": {
        "my_unpredictable_field": {
          "enabled": false
        }
      }
    }
  }
}
Elasticsearch尝试为这些文档编制索引时,这会导致解析错误。出于技术原因,对我来说,预处理这些文档并将
“-”
更改为
null
是非常不寻常的。是否有任何方法来定义我的映射应该将哪些值视为
null
?我是否可以编写一个分析器,它可以处理任何字段类型,我可以将其添加到映射中的所有条目中


基本上,我在寻找与
null\u值
选项相反的选项。与其告诉Elasticsearch将
null\u值
转换成什么,不如告诉它应该将
null\u值转换成什么。同样可以接受的方法是告诉Elasticsearch忽略某些字段,但仍然解析文档中的其他字段。

因此这一方法显然很简单。将以下内容添加到映射设置中:

{
  "settings": {
    "index": {
      "mapping": {
        "ignore_malformed": "true"
      }
    }
  }
}
这仍然会对字段进行索引(与我从文档中了解的情况相反…),但在聚合过程中会忽略它(因此,如果在
整数
字段中有3个条目,分别为
“1”
3
、和
“hello world”
,则平均聚合将产生
2

请记住,由于该选项的实现方式(我认为这是一个bug),对于作为具体值输入的对象和
对象,该选项仍然失败,反之亦然。如果您想了解这一点,可以将字段的
enabled
值设置为
false
,如下所示:

{"message": "hello world", "size": "-", "forward-to": ""}
{
  "mappings": {
    "my_mapping_name": {
      "properties": {
        "my_unpredictable_field": {
          "enabled": false
        }
      }
    }
  }
}

这是有代价的,因为这意味着该字段不会被索引,但输入的值仍将被存储,因此您仍然可以通过另一个字段搜索该文档来访问它们。这通常不应该是一个问题,因为您可能不会根据此类不可预测字段的值筛选文档,但这取决于您的具体案例使用情况。有关此问题的正式讨论,请参阅。

我刚刚意识到有一个
忽略\u格式不正确的
选项……或者您可以创建一个自定义分析器来删除“null”标记