elasticsearch查询返回错误结果

kg7wmglp  于 2021-07-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(318)

我对elasticsearch比较陌生,遇到了这个问题,我似乎不知道为什么。
所以对于这个特定的字段,它似乎将所有的值都处理为零,即使单个记录是非零值。这似乎只发生在这个数字字段,而不是其他类似的字段(如cpu pct、mem pct等)
这些记录仅在我查询“system.filesystem.used.pct==0”的记录时显示,而当我执行类似“system.filesystem.used.pct>0”的操作时,它们都不显示。

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

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


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

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

rqcrx0a6

rqcrx0a61#

正如@ronserruya所指出的,有一个Map问题。的Map system.filesytem.used.pct 被检测为 integer 类型。因为,您将获得预期的搜索结果 cpu.pct 字段,Map cpu.pct ,一定是 float 类型
案例1:
如果将两个样本数据索引为(按相同顺序)

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

那么 float 数据类型由elasticsearch检测(如果您使用的是动态Map)。这是因为字段类型的检测取决于您在字段中插入的第一个数据。
案例2:
现在,如果你按照这个顺序索引数据

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

elasticsearch将检测到 count 属于 long 数据类型。
您需要使用新的索引Map重新创建索引,重新索引数据,然后在上运行搜索查询 system.filesytem.used.pct 修改后的索引Map将

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

相关问题