词干覆盖词元过滤器

词干覆盖词元过滤器 #

词干覆盖(stemmer_override)词元过滤器允许你定义自定义的词干提取规则,这些规则可以覆盖像波特(Porter)或雪球(Snowball)等默认词干提取器的行为。当你希望对某些特定的单词应用特殊的词干提取方式,而这些单词可能无法被标准的词干提取算法正确处理时,这个过滤器就会非常有用。

参数说明 #

词干覆盖词元过滤器必须使用以下参数中的一个进行配置。

参数数据类型描述
rules字符串直接在设置中定义覆盖规则。
rules_path字符串指定包含自定义规则(映射)的文件的路径。该路径可以是绝对路径,也可以是相对于配置目录的相对路径。

参考样例 #

以下示例请求创建了一个名为 my-index 的新索引,并配置了一个带有词干覆盖过滤器的分词器。

PUT /my-index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_stemmer_override_filter": {
          "type": "stemmer_override",
          "rules": [
            "running, runner => run",
            "bought => buy",
            "best => good"
          ]
        }
      },
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_stemmer_override_filter"
          ]
        }
      }
    }
  }
}

产生的词元 #

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

GET /my-index/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "I am a runner and bought the best shoes"
}

返回内容包含产生的词元

{
  "tokens": [
    {
      "token": "i",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "am",
      "start_offset": 2,
      "end_offset": 4,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "a",
      "start_offset": 5,
      "end_offset": 6,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "run",
      "start_offset": 7,
      "end_offset": 13,
      "type": "<ALPHANUM>",
      "position": 3
    },
    {
      "token": "and",
      "start_offset": 14,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 4
    },
    {
      "token": "buy",
      "start_offset": 18,
      "end_offset": 24,
      "type": "<ALPHANUM>",
      "position": 5
    },
    {
      "token": "the",
      "start_offset": 25,
      "end_offset": 28,
      "type": "<ALPHANUM>",
      "position": 6
    },
    {
      "token": "good",
      "start_offset": 29,
      "end_offset": 33,
      "type": "<ALPHANUM>",
      "position": 7
    },
    {
      "token": "shoes",
      "start_offset": 34,
      "end_offset": 39,
      "type": "<ALPHANUM>",
      "position": 8
    }
  ]
}