条件标记过滤器编辑

将一组标记过滤器应用于与提供的谓词脚本中的条件匹配的标记。

此过滤器使用 Lucene 的 ConditionalTokenFilter

示例编辑

以下 分析 API 请求使用 condition 过滤器来匹配 THE QUICK BROWN FOX 中少于 5 个字符的标记。然后,它将 lowercase 过滤器应用于那些匹配的标记,将它们转换为小写。

response = client.indices.analyze(
  body: {
    tokenizer: 'standard',
    filter: [
      {
        type: 'condition',
        filter: [
          'lowercase'
        ],
        script: {
          source: 'token.getTerm().length() < 5'
        }
      }
    ],
    text: 'THE QUICK BROWN FOX'
  }
)
puts response
GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "condition",
      "filter": [ "lowercase" ],
      "script": {
        "source": "token.getTerm().length() < 5"
      }
    }
  ],
  "text": "THE QUICK BROWN FOX"
}

该过滤器产生以下标记

[ the, QUICK, BROWN, fox ]

可配置参数编辑

filter

(必填,标记过滤器数组)标记过滤器数组。如果标记与 script 参数中的谓词脚本匹配,则这些过滤器将按提供的顺序应用于该标记。

这些过滤器可以包含索引映射中定义的自定义标记过滤器。

script

(必填,脚本对象)用于应用标记过滤器的谓词脚本。如果标记与此脚本匹配,则 filter 参数中的过滤器将应用于该标记。

有关有效参数,请参阅 如何编写脚本。仅支持内联脚本。Painless 脚本在 分析谓词上下文 中执行,并且需要一个 token 属性。

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

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

例如,以下 创建索引 API 请求使用自定义 condition 过滤器来配置新的 自定义分析器。自定义 condition 过滤器匹配流中的第一个标记。然后,它使用 reverse 过滤器反转匹配的标记。

response = client.indices.create(
  index: 'palindrome_list',
  body: {
    settings: {
      analysis: {
        analyzer: {
          whitespace_reverse_first_token: {
            tokenizer: 'whitespace',
            filter: [
              'reverse_first_token'
            ]
          }
        },
        filter: {
          reverse_first_token: {
            type: 'condition',
            filter: [
              'reverse'
            ],
            script: {
              source: 'token.getPosition() === 0'
            }
          }
        }
      }
    }
  }
)
puts response
PUT /palindrome_list
{
  "settings": {
    "analysis": {
      "analyzer": {
        "whitespace_reverse_first_token": {
          "tokenizer": "whitespace",
          "filter": [ "reverse_first_token" ]
        }
      },
      "filter": {
        "reverse_first_token": {
          "type": "condition",
          "filter": [ "reverse" ],
          "script": {
            "source": "token.getPosition() === 0"
          }
        }
      }
    }
  }
}