我对 ElasticSearch 比较陌生,遇到了这个我似乎不明白为什么的问题。
因此对于这个特定字段,它似乎将所有值都视为零,即使单个记录是非零值。这似乎只发生在这个 number 字段上,而不是其他类似的字段(例如 cpu pct、mem pct 等)
这些记录仅在我查询具有“system.filesystem.used.pct == 0”的记录时显示,而当我执行诸如“system.filesystem.used.pct > 0”之类的操作时,它们都不显示。< /p>
我也像这样在 kibana 的开发工具中进行了查询,但我没有得到任何结果:
GET metricbeat-*/_search{
"query": {
"range":{
"system.filesystem.used.pct":{
"gt":0
}
}
}
}
但是,如果我这样做,我将得到所有非零结果,就像在发现中一样:
GET metricbeat-*/_search
{
"query": {
"term": {
"system.filesytem.used.pct":0
}
}
}
答案 0 :(得分:2)
正如@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 将检测count
为long
数据类型。
您需要重新创建索引,使用新的索引映射,重新索引数据,然后在 system.filesytem.used.pct
上运行搜索查询
修改后的索引映射为
{
"mappings": {
"properties": {
"system": {
"properties": {
"filesytem": {
"properties": {
"used": {
"properties": {
"pct": {
"type": "float"
}
}
}
}
}
}
}
}
}
}