模式替换词元过滤器编辑

使用正则表达式匹配和替换词元子字符串。

pattern_replace 过滤器使用 Java 的正则表达式语法。默认情况下,过滤器用空子字符串 ("") 替换匹配的子字符串。替换子字符串可以使用 Java 的 $g 语法 来引用原始词元文本中的捕获组。

编写不良的正则表达式可能会运行缓慢或返回 StackOverflowError,导致运行该表达式的节点突然退出。

阅读有关 病态正则表达式以及如何避免它们 的更多信息。

此过滤器使用 Lucene 的 PatternReplaceFilter

示例编辑

以下 分析 API 请求使用 pattern_replace 过滤器将 watch 添加到 foxes jump lazy dogs 中的子字符串 dog 之前。

response = client.indices.analyze(
  body: {
    tokenizer: 'whitespace',
    filter: [
      {
        type: 'pattern_replace',
        pattern: '(dog)',
        replacement: 'watch$1'
      }
    ],
    text: 'foxes jump lazy dogs'
  }
)
puts response
GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": [
    {
      "type": "pattern_replace",
      "pattern": "(dog)",
      "replacement": "watch$1"
    }
  ],
  "text": "foxes jump lazy dogs"
}

过滤器生成以下词元。

[ foxes, jump, lazy, watchdogs ]

可配置参数编辑

all
(可选,布尔值)如果为 true,则替换与 pattern 参数的正则表达式匹配的所有子字符串。如果为 false,则过滤器仅替换每个词元中的第一个匹配子字符串。默认为 true
pattern
(必填,字符串)正则表达式,使用 Java 的正则表达式语法 编写。过滤器使用 replacement 参数中的子字符串替换与此模式匹配的词元子字符串。
replacement
(可选,字符串)替换子字符串。默认为空子字符串 ("")。

自定义并添加到分析器编辑

要自定义 pattern_replace 过滤器,请复制它以创建新的自定义词元过滤器的基础。您可以使用其可配置参数修改过滤器。

以下 创建索引 API 请求使用自定义 pattern_replace 过滤器 my_pattern_replace_filter 配置新的 自定义分析器

my_pattern_replace_filter 过滤器使用正则表达式 [£|€] 匹配并删除货币符号 £。过滤器的 all 参数为 false,这意味着仅删除每个词元中的第一个匹配符号。

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_analyzer: {
            tokenizer: 'keyword',
            filter: [
              'my_pattern_replace_filter'
            ]
          }
        },
        filter: {
          my_pattern_replace_filter: {
            type: 'pattern_replace',
            pattern: '[£|€]',
            replacement: '',
            all: false
          }
        }
      }
    }
  }
)
puts response
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "filter": [
            "my_pattern_replace_filter"
          ]
        }
      },
      "filter": {
        "my_pattern_replace_filter": {
          "type": "pattern_replace",
          "pattern": "[£|€]",
          "replacement": "",
          "all": false
        }
      }
    }
  }
}