Elasticsearch-未应用别名过滤器

时间:2020-07-02 10:56:29

标签: elasticsearch logstash alias

我们使用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管理和快速部署测试环境。

1 个答案:

答案 0 :(得分:0)

很好的开始!!您只是在别名中缺少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"
        }
      }
    }
  }
}