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”标记