elasticsearch 使用词干提取器处理英语语言

es默认的语言分析器standard只能对英语语言进行简单处理,无法将变形后的单词还原为词干。

es中提供了很多词干提取器:

譬如基于算法的 Porter stemmer,基于算法和内置词典的kstem和基于外置词典的hunspell

在使用language analyzers的英语分析器时默认就是使用的porter stemmer。不过该词干提取器效果并不是很好。

有两种方案修改:

使用kstem token filter

 
PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_"
        },
        "light_english_stemmer": {
          "type":       "stemmer",
          "language":   "light_english" 
        },
        "english_possessive_stemmer": {
          "type":       "stemmer",
          "language":   "possessive_english"
        }
      },
      "analyzer": {
        "english": {
          "tokenizer":  "standard",
          "filter": [
            "english_possessive_stemmer",
            "lowercase",
            "english_stop",
            "light_english_stemmer", 
            "asciifolding" 
          ]
        }
      }
    }
  }
}

 

上面的词干提取器快速,但还是无法解决特殊单词的问题。譬如flies->fly

如果要精确就可以使用hunpell词干提取器,改提取器可以自定义变形单词

1,去下载相关的语言处理包

http://download.services.openoffice.org/contrib/dictionaries/

2:将语言处理包配置在es的config目录下

config/
  └ hunspell/ 
      └ en_US/ 
          ├ en_US.dic
          ├ en_US.aff
          └ settings.yml 

settings.yms:

 
ignore_case:          true
strict_affix_parsing: true

3:自定义分词器

PUT /my_index3
{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_"
        },
        "hunspell_en_US": {
          "type":       "hunspell",
          "language":   "en_US" 
        }
      },
      "analyzer": {
        "english": {
          "tokenizer":  "standard",
          "filter": [
            "lowercase",
            "english_stop",
            "hunspell_en_US", 
            "asciifolding" 
          ]
        }
      }
    }
  }
}


asciifolding是去除特殊字符
kstem  token filter
 

测试一下新的分析器

POST my_index3/_analyze
{
  "analyzer": "english",
  "text":     "flies"
}

分词之后的结果

{
  "tokens": [
    {
      "token": "fly",
      "start_offset": 0,
      "end_offset": 5,
      "type": "<ALPHANUM>",
      "position": 0
    }
  ]
}

还可以编辑en_US.dic进行自定义单词转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值