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

时间:2017-01-18 16:34:43

标签: elasticsearch

我正在解析日志文件,为简单起见,我们会说它们具有以下格式:

{"message": "hello world", "size": 100, "forward-to": 127.0.0.1}

我将这些行编入索引为 Elasticsearch 索引,我已经定义了自定义映射,messagesize和{{ 1}}分别是forward-totextinteger类型。但是,一些日志行将如下所示:

ip

Elasticsearch 尝试索引这些文档时,这会导致解析错误。由于技术原因,我预先处理这些文档并将{"message": "hello world", "size": "-", "forward-to": ""} "-"更改为""非常重要。无论如何要定义我的映射应该将哪些值视为null?是否有一个我可以编写的分析器可以在任何字段类型上工作,我可以将其添加到映射中的所有条目中?

基本上我正在寻找与null选项相反的方式。我没有告诉弹性搜索null_value变为什么,而是告诉它应该变成null_value。同样可以接受的方法是告诉 Elasticsearch 简单地忽略看起来某种方式但仍解析文档中其他字段的字段。

1 个答案:

答案 0 :(得分:0)

所以这显然很容易。将以下内容添加到映射设置中:

{
  "settings": {
    "index": {
      "mapping": {
        "ignore_malformed": "true"
      }
    }
  }
}

这仍将为该字段编制索引(与我从文档中理解的内容相反......)但在聚合期间将被忽略(因此,如果integer字段中有3个条目{{{ 1}},"1"3,平均聚合将产生"hello world")。

请记住,由于选项的实现方式(我会说这是一个错误),这仍然失败,并且2作为具体值输入,反之亦然。如果您想绕过它,可以将字段的object值设置为enabled,如下所示:

false

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