Stemmer 分词过滤器

编辑

为多种语言提供算法词干提取,有些语言还包括额外的变体。有关支持的语言列表,请参阅language 参数。

如果未进行自定义,则该过滤器对英语使用Porter 词干提取算法

示例

编辑

以下分析 API 请求使用stemmer 过滤器的默认 Porter 词干提取算法,将the foxes jumping quickly 词干提取为the fox jump quickli

resp = client.indices.analyze(
    tokenizer="standard",
    filter=[
        "stemmer"
    ],
    text="the foxes jumping quickly",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'standard',
    filter: [
      'stemmer'
    ],
    text: 'the foxes jumping quickly'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "standard",
  filter: ["stemmer"],
  text: "the foxes jumping quickly",
});
console.log(response);
GET /_analyze
{
  "tokenizer": "standard",
  "filter": [ "stemmer" ],
  "text": "the foxes jumping quickly"
}

该过滤器生成以下标记:

[ the, fox, jump, quickli ]

添加到分析器

编辑

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

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "my_analyzer": {
                    "tokenizer": "whitespace",
                    "filter": [
                        "stemmer"
                    ]
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_analyzer: {
            tokenizer: 'whitespace',
            filter: [
              'stemmer'
            ]
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        my_analyzer: {
          tokenizer: "whitespace",
          filter: ["stemmer"],
        },
      },
    },
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "whitespace",
          "filter": [ "stemmer" ]
        }
      }
    }
  }
}

可配置参数

编辑
language

(可选,字符串) 用于对标记进行词干提取的依赖于语言的词干提取算法。如果同时指定了此参数和name 参数,则使用language 参数的值。

language 的有效值

有效值按语言排序。默认为english。推荐的算法以粗体显示。

阿拉伯语
arabic
亚美尼亚语
armenian
巴斯克语
basque
孟加拉语
bengali
巴西葡萄牙语
brazilian
保加利亚语
bulgarian
加泰罗尼亚语
catalan
捷克语
czech
丹麦语
danish
荷兰语
dutch, dutch_kp [8.16.0] 已在 8.16.0 中弃用。 dutch_kp 将在未来版本中删除
英语
english, light_english, lovins [8.16.0] 已在 8.16.0 中弃用。 lovins 将在未来版本中删除 , minimal_english, porter2, possessive_english
爱沙尼亚语
estonian
芬兰语
finnish, light_finnish
法语
light_french, french, minimal_french
加利西亚语
galician, minimal_galician (仅复数步骤)
德语
light_german, german, german2, minimal_german
希腊语
greek
印地语
hindi
匈牙利语
hungarian, light_hungarian
印尼语
indonesian
爱尔兰语
irish
意大利语
light_italian, italian
库尔德语(索拉尼语)
sorani
拉脱维亚语
latvian
立陶宛语
lithuanian
挪威语(博克马尔语)
norwegian, light_norwegian, minimal_norwegian
挪威语(新挪威语)
light_nynorsk, minimal_nynorsk
波斯语
persian
葡萄牙语
light_portuguese, minimal_portuguese, portuguese, portuguese_rslp
罗马尼亚语
romanian
俄语
russian, light_russian
塞尔维亚语
serbian
西班牙语
light_spanish, spanish spanish_plural
瑞典语
swedish, light_swedish
土耳其语
turkish
name
language 参数的别名。如果同时指定了此参数和language 参数,则使用language 参数的值。

自定义

编辑

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

例如,以下请求创建了一个自定义stemmer 过滤器,该过滤器使用light_german 算法对单词进行词干提取。

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "my_analyzer": {
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "my_stemmer"
                    ]
                }
            },
            "filter": {
                "my_stemmer": {
                    "type": "stemmer",
                    "language": "light_german"
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_analyzer: {
            tokenizer: 'standard',
            filter: [
              'lowercase',
              'my_stemmer'
            ]
          }
        },
        filter: {
          my_stemmer: {
            type: 'stemmer',
            language: 'light_german'
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        my_analyzer: {
          tokenizer: "standard",
          filter: ["lowercase", "my_stemmer"],
        },
      },
      filter: {
        my_stemmer: {
          type: "stemmer",
          language: "light_german",
        },
      },
    },
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_stemmer"
          ]
        }
      },
      "filter": {
        "my_stemmer": {
          "type": "stemmer",
          "language": "light_german"
        }
      }
    }
  }
}