gpt4 book ai didi

elasticsearch - 如何在 `Elasticsearch`中将某些字段值视为空

转载 作者:行者123 更新时间:2023-12-02 22:30:29 25 4
gpt4 key购买 nike

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

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

我将这些行索引到 Elasticsearch 索引中,在其中定义了一个自定义映射,使得 messagesizeforward-to的类型分别为 textintegerip。但是,某些日志行将如下所示:
{"message": "hello world", "size": "-", "forward-to": ""}

Elasticsearch 尝试索引这些文档时,这会导致解析错误。由于技术原因,对我来说预处理这些文档并将 "-"""更改为 null是非常无可非议的。无论如何,有没有定义我的映射应将其视为 null的值?也许我可以编写一个可以在任何字段类型上使用的分析器,然后将其添加到映射中的所有条目中?

基本上,我在寻找与 null_value选项相反的东西。与其告诉 Elasticsearch 而不是告诉将 null_value转换成什么,我想告诉它应该将其转换成 null_value的内容。一种可以告诉 Elasticsearch 的方法是简单地忽略看起来是某种方式但仍然解析文档中其他字段的方法。

最佳答案

因此,这显然很容易。将以下内容添加到您的映射设置中:

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

这仍将为字段建立索引(与我从文档中了解的相反...),但在聚合期间将忽略该字段(因此,如果 integer字段中有3个条目,分别是 "1"3"hello world",聚合将产生 2)。

请记住,由于该选项的实现方式(我会说这是一个错误),仍然失败,并且 object作为具体值输入,反之亦然。如果您想解决这个问题,可以将字段的 enabled值设置为 false,如下所示:
{
"mappings": {
"my_mapping_name": {
"properties": {
"my_unpredictable_field": {
"enabled": false
}
}
}
}
}

不过,这需要付出一定的代价,因为这意味着该字段不会被索引,但是输入的值仍将被存储,因此您仍然可以通过在另一个字段中搜索该文档来访问它们。这通常不应该成为问题,因为您可能不会基于这样一个不可预测的字段的值来过滤文档,但这取决于您的特定案例用途。有关此问题的正式讨论,请参见 here

关于elasticsearch - 如何在 `Elasticsearch`中将某些字段值视为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com