美文网首页
【elasticsearch】7、通过analyzer进行分词

【elasticsearch】7、通过analyzer进行分词

作者: cutieagain | 来源:发表于2020-03-10 14:18 被阅读0次

    analysis与analyzer

    • analysis - 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词
    • analysis 是通过analyzer实现的
      • 可以使用elasticsearch内置的分析器,或者按需定制化分析器
    • 除了在数据写入时转换词条,匹配query语句的时候也需要用相同的分析器对查询语句进行分析


      分词转换

    analysis的组成

    • 分词器是专门处理分词的组件,analyzer由三部分组成
      • character filters(针对原始文本处理,例如去除html)
      • tokenizer(按照规则切分未单词)
      • token filter(将切分的单词进行加工,小写,删除stopwords,增加同义词)


        分词器组成

    elasticsearch内置的分词器

    • Simple Analyzer – 按照非字母切分(符号被过滤),小写处理
    • Stop Analyzer – 小写处理,停用词过滤(the,a,is)
    • Whitespace Analyzer – 按照空格切分,不转小写
    • Keyword Analyzer – 不分词,直接将输入当作输出
    • Patter Analyzer – 正则表达式,默认 \W+ (非字符分隔)
    • Language – 提供了30多种常见语言的分词器
    • Customer Analyzer 自定义分词器

    使用analyzer api

    analyzer api
    • 直接指定analyzer进行测试
    • 指定索引的字段进行测试
    • 自定义分词器进行测试

    standard analyzer

    standaed analyzer
    • 默认分词器
    • 按词切分
    • 小写处理

    simple analyzer

    simple analyzer
    • 按照非字母切分,非字母的都被去除
    • 小写处理

    whitespace analyzer

    whitespace analyzer
    • 按照空格切分

    stop analyzer

    stop analyzer
    • 相比 simple analyzer,多了stop filter(会把the,a,is等修饰性词语去除)

    keyword analyzer

    keyword analyzer
    • 不分词,直接将输入当一个term输出

    pattern analyzer

    pattern analyzer
    • 通过正则表达式进行分词
    • 默认是\W+,非字符的符号进行分割

    language analyzer

    language analyzer

    中文分词的难点

    • 中文句子,切分成一个一个的词(不是字)
    • 英文中,单词有自然的空格作为分隔
    • 一句中文,在不同的上下文,有不同的理解
      • 这个苹果,不大好吃/这个苹果,不大,好吃

    icu analyzer

    icu analyzer
    • 需要安装plugin
      • bin/elasticsearch-plugin install analysis-icu
    • 提供了unicode的支持,更好地支持亚洲语言

    更多的中文分词器

    查看不同的analyzer的效果

    #standard
    GET _analyze
    {
      "analyzer": "standard",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    #simpe
    GET _analyze
    {
      "analyzer": "simple",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    
    GET _analyze
    {
      "analyzer": "stop",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    
    #stop
    GET _analyze
    {
      "analyzer": "whitespace",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    #keyword
    GET _analyze
    {
      "analyzer": "keyword",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    GET _analyze
    {
      "analyzer": "pattern",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    
    #english
    GET _analyze
    {
      "analyzer": "english",
      "text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
    }
    
    
    POST _analyze
    {
      "analyzer": "icu_analyzer",
      "text": "他说的确实在理”"
    }
    
    
    POST _analyze
    {
      "analyzer": "standard",
      "text": "他说的确实在理”"
    }
    
    
    POST _analyze
    {
      "analyzer": "icu_analyzer",
      "text": "这个苹果不大好吃"
    }
    
    

    相关文章

      网友评论

          本文标题:【elasticsearch】7、通过analyzer进行分词

          本文链接:https://www.haomeiwen.com/subject/oquidhtx.html