【问题标题】:Elasticsearch - alias filters aren't being appliedElasticsearch - 没有应用别名过滤器
【发布时间】:2020-07-02 10:56:29
【问题描述】:

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

【问题讨论】:

    标签: elasticsearch logstash alias


    【解决方案1】:

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

    【讨论】:

    • 这两个版本都不适合我。过滤子句被完全忽略。
    • 你能展示你是如何创建模板,然后是索引,最后运行 GET system-*
    • 我只是使用 logstash 来写入索引。就像我在帖子中写的那样,logstash 也应用了模板。
    • 我想看看你从 GET 系统中得到了什么-*
    猜你喜欢
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多