首页 > 解决方案 > Elasticsearch - 没有应用别名过滤器

问题描述

我们使用 logstash 的 Elasticsearch 输出插件应用我们的索引模板。我们所有的索引模式都是这样的:“--”我正在尝试使用别名过滤器为每个子系统创建一个别名,但是没有应用过滤器,导致每个索引都配置了所有别名。(所以子系统 A,获取子系统 A 和子系统 B 以及所有其他子系统的别名)

我的模板如下所示:

{
  "index_patterns" : "system-*",
  "version" : 1,
  "settings" : {
    "index.codec": "best_compression"
  },
  "aliases" : {
    "system" : {},
    
    "system-subsystem_a" : {
      "bool" : {
          "filter" : {
            "term" : {"Subsystem" : "subsystem_a"}
          }
      },

    "system-subsystem_b" : {
      "bool" : {
          "filter" : {
            "term" : {"Subsystem" : "subsystem_b"}
          }
      }
    }
}

我尝试了一些不同的变体和组合(不使用“bool”块。将术语“Subsystem”更改为“Subsystem.keyword”等)都得出了相同的结果。

我之前实际上问过一个类似的问题:elasticsearch templates - create alias from index_pattern

@ibexit 建议为每个子系统创建一个模板,但 logstash 的 elasticsearch 输出插件不支持多个模板。我希望避免使用 API。使用单个文件使我更容易使用 docker-compose 管理和快速部署测试环境。

标签: elasticsearchlogstashalias

解决方案


伟大的开始!您只是缺少filter别名中的声明:

{
  "index_patterns": "system-*",
  "version": 1,
  "settings": {
    "index.codec": "best_compression"
  },
  "aliases": {
    "system": {},
    "system-subsystem_a": {
      "filter": {                   
        "bool": {
          "filter": {
            "term": {
              "Subsystem": "subsystem_a"
            }
          }
        }
      }
    },
    "system-subsystem_b": {
      "filter": {
        "bool": {
          "filter": {
            "term": {
              "Subsystem": "subsystem_b"
            }
          }
        }
      }
    }
  }
}

还有一个更简单的版本,你根本不需要bool/filter

{
  "index_patterns": "system-*",
  "version": 1,
  "settings": {
    "index.codec": "best_compression"
  },
  "aliases": {
    "system": {},
    "system-subsystem_a": {
      "filter": {
        "term": {
          "Subsystem": "subsystem_a"
        }
      }
    },
    "system-subsystem_b": {
      "filter": {
        "term": {
          "Subsystem": "subsystem_b"
        }
      }
    }
  }
}

推荐阅读