ElasticSearch 查询 returns 个错误结果

ElasticSearch query returns wrong results

我是 ElasticSearch 的新手,遇到了这个问题,我似乎不明白为什么。

所以对于这个特定字段,它似乎将所有值都视为零,即使个别记录是非零值。这似乎只发生在这个数字字段而不是其他类似字段(例如 cpu pct、mem pct 等)

只有当我查询具有 'system.filesystem.used.pct == 0' 的记录时才会显示这些记录,而当我执行 'system.filesystem.used.pct > 0'.

之类的操作时,其中 none 会显示

我也像这样在kibana的开发工具中查询过,但是我没有得到任何结果:

GET metricbeat-*/_search{
  "query": {
    "range":{
      "system.filesystem.used.pct":{
         "gt":0
        }
       }
     }
}

但是,如果我这样做,我将得到所有非零结果,就像在 discover:

GET metricbeat-*/_search
{
  "query": {
    "term": {
      "system.filesytem.used.pct":0
     }
  }
}

正如@Ron Serruya 所指出的,存在映射问题。 system.filesytem.used.pct 的映射被检测为 integer 类型。因为,您正在获得 cpu.pct 字段的预期搜索结果,cpu.pct 的映射必须是 float 类型

案例 1:

如果将两个样本数据索引为(顺序相同)

{
  "count": 0.45
}
{
  "count": 0
}

然后 float 数据类型被 elasticsearch 检测到(如果你使用的是动态映射)。这是因为字段类型的检测取决于您在字段中插入的第一个数据。

案例 2:

现在,如果您按此顺序索引数据

{
  "count": 0
}
{
  "count": 0.45
}

此处elasticsearch将检测countlong数据类型。


您需要重新创建索引,使用新的索引映射,重新索引数据,然后 运行 system.filesytem.used.pct

上的搜索查询

修改后的索引映射将是

{
  "mappings": {
    "properties": {
      "system": {
        "properties": {
          "filesytem": {
            "properties": {
              "used": {
                "properties": {
                  "pct": {
                    "type": "float"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}