条件分词过滤器

条件分词过滤器 #

条件(condition)分词过滤器是一种特殊类型的过滤器,它允许你根据特定标准有条件地应用其他分词过滤器。这使得在文本分析过程中,你能更精准地控制何时应用特定的分词过滤器。你可以配置多个过滤器,并且只有当满足你定义的条件时,这些过滤器才会被应用。该分词过滤器在进行特定语言处理和特殊字符处理时非常有用。

参数说明 #

要使用条件分词过滤器,必须配置两个参数,具体如下:

参数必需/可选数据类型描述
filter必需数组当满足由 script 参数定义的指定条件时,指定应对词元应用哪个分词过滤器。
script必需对象配置一个内联脚本,该脚本定义了要应用 filter 参数中指定的过滤器所需满足的条件(仅接受内联脚本)。

参考样例 #

以下示例请求创建了一个名为 my_conditional_index 的新索引,并配置了一个带有条件过滤器的分词器。该过滤器会对任何包含字符序列 “um” 的词元应用小写(lowercase)字母过滤器。

PUT /my_conditional_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_conditional_filter": {
          "type": "condition",
          "filter": ["lowercase"],
          "script": {
            "source": "token.getTerm().toString().contains('um')"
          }
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "my_conditional_filter"
          ]
        }
      }
    }
  }
}

产生的词元 #

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

GET /my_conditional_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "THE BLACK CAT JUMPS OVER A LAZY DOG"
}

返回内容包含产生的词元

{
  "tokens": [
    {
      "token": "THE",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "BLACK",
      "start_offset": 4,
      "end_offset": 9,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "CAT",
      "start_offset": 10,
      "end_offset": 13,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "jumps",
      "start_offset": 14,
      "end_offset": 19,
      "type": "<ALPHANUM>",
      "position": 3
    },
    {
      "token": "OVER",
      "start_offset": 20,
      "end_offset": 24,
      "type": "<ALPHANUM>",
      "position": 4
    },
    {
      "token": "A",
      "start_offset": 25,
      "end_offset": 26,
      "type": "<ALPHANUM>",
      "position": 5
    },
    {
      "token": "LAZY",
      "start_offset": 27,
      "end_offset": 31,
      "type": "<ALPHANUM>",
      "position": 6
    },
    {
      "token": "DOG",
      "start_offset": 32,
      "end_offset": 35,
      "type": "<ALPHANUM>",
      "position": 7
    }
  ]
}