如何在Curator过滤器上使用贪婪正则表达式?

时间:2018-10-26 12:45:50

标签: regex elasticsearch elasticsearch-curator

我已设置Curator通过此过滤器删除旧的Elasticsearch索引:

(...)
filters:
- filtertype: pattern
  kind: regex
  value: '^xyz-us-(prod|preprod)-(.*)-'
  exclude:
- filtertype: age
  source: name
  direction: older
  timestring: '%Y.%m.%d'
  unit: days
  unit_count: 7
  exclude:
(...)

但是,我意识到Curator使用非贪婪的正则表达式,因为此过滤器捕获了索引xyz-us-prod-foo-2018.10.11而不是xyz-us-prod-foo-bar-2018.10.11

如何修改过滤器以同时捕获两个索引?

2 个答案:

答案 0 :(得分:1)

创建者对Regex引擎的实现使用U(不贪婪)标志。

默认情况下,贪婪的正则表达式会使星号修饰符变得懒惰,并添加“?” “不满意”选项下的修饰符会将其恢复为“贪婪”。

尝试添加“?”在正则表达式中的“。*”之后

'^xyz-us-(prod|preprod)-(.***?**)-'

答案 1 :(得分:1)

我在https://discuss.elastic.co/t/use-greedy-regexes-in-curator-filter/154200给出的答案仍然不错,尽管您无法以某种方式获得我在此处发布的结果。固定结尾并指定正则表达式对我有用的日期:'^xyz-us-(prod|preprod)-.*-\d{4}\.\d{2}\.\d{2}$'

我创建了这些索引:

PUT xyz-us-prod-foo-2018.10.11
PUT xyz-us-prod-foo-bar-2018.10.11
PUT xyz-us-preprod-foo-2018.10.12
PUT xyz-us-preprod-foo-bar-2018.10.12

并运行以下配置:

---
actions:
  1:
    action: delete_indices
    filters:
    - filtertype: pattern
      kind: regex
      value: '^xyz-us-(prod|preprod)-.*-\d{4}\.\d{2}\.\d{2}$'
      exclude:
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: 7

结果完全匹配:

2018-10-29 20:08:28,120 INFO               curator.utils           show_dry_run:928  DRY-RUN: delete_indices: xyz-us-preprod-foo-2018.10.12 with arguments: {}
2018-10-29 20:08:28,120 INFO               curator.utils           show_dry_run:928  DRY-RUN: delete_indices: xyz-us-preprod-foo-bar-2018.10.12 with arguments: {}
2018-10-29 20:08:28,120 INFO               curator.utils           show_dry_run:928  DRY-RUN: delete_indices: xyz-us-prod-foo-2018.10.11 with arguments: {}
2018-10-29 20:08:28,120 INFO               curator.utils           show_dry_run:928  DRY-RUN: delete_indices: xyz-us-prod-foo-bar-2018.10.11 with arguments: {}