捕获匹配词元过滤器

捕获匹配词元过滤器 #

捕获匹配(pattern_capture)词元过滤器是一种功能强大的过滤器,它使用正则表达式根据特定模式来捕获和提取文本的部分内容。当你想要提取词元的特定部分,例如电子邮件域名、话题标签或数字,并将其重新用于进一步的分析或索引编制时,这个过滤器会非常有用。

参数说明 #

捕获匹配词元过滤器可以使用以下参数进行配置。

参数必需/可选数据类型描述
patterns必需字符串数组用于捕获文本部分的正则表达式数组。
preserve_original必需布尔值是否在输出中保留原始词元。默认值为 true。

参考样例 #

以下示例请求创建了一个名为 email_index 的新索引,并配置了一个带有捕获匹配过滤器的分词器,以便从电子邮件地址中提取本地部分和域名。

PUT /email_index
{
  "settings": {
    "analysis": {
      "filter": {
        "email_pattern_capture": {
          "type": "pattern_capture",
          "preserve_original": true,
          "patterns": [
            "^([^@]+)",
            "@(.+)$"
          ]
        }
      },
      "analyzer": {
        "email_analyzer": {
          "tokenizer": "uax_url_email",
          "filter": [
            "email_pattern_capture",
            "lowercase"
          ]
        }
      }
    }
  }
}

产生的词元 #

使用以下请求来检查使用该分词器生成的词元:

POST /email_index/_analyze
{
  "text": "john.doe@example.com",
  "analyzer": "email_analyzer"
}

返回内容包含产生的词元

{
  "tokens": [
    {
      "token": "john.doe@example.com",
      "start_offset": 0,
      "end_offset": 20,
      "type": "<EMAIL>",
      "position": 0
    },
    {
      "token": "john.doe",
      "start_offset": 0,
      "end_offset": 20,
      "type": "<EMAIL>",
      "position": 0
    },
    {
      "token": "example.com",
      "start_offset": 0,
      "end_offset": 20,
      "type": "<EMAIL>",
      "position": 0
    }
  ]
}