Elasticsearch 创建自定义分析器(4)

一.自定义分析器

  当内置分析器不能满足时,可以创建一个自定义分析器,自定义分析器(analyzer)由:

      1)0或多个 charactcr filter 字符过滤器

      2)  1个 tokenizer 分词器,将文本切分为分词

         3)0或多个 token filter 令牌过滤器,是属于分词后再过滤

  自定义配置参数如下

type 分析器类型,接收内置分析器类型,可以使用custom(代表自定义分析器)或者省略此参数
tokenizer 内置或自定义分词器 (必填)
char_filter 内置或自定义字符过滤器(character filters)  可选数组
filter 内置或自定义令牌过滤器(token filter)可选数组
position_increment_gap 间隙值,跨值访问,一般用于match_phrase短语查询检索数据,默认值100

  示例1:自定义一个分析器

    1)char_filter字符过滤器:使用html_strip去除html标签

    2)  tokenizer分词器:使用standard标准分词器

    3)filter令牌过滤器: 使用 lowercase转小写,使用asciifolding转为ascii


    定义分析器结构如下:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {  #自定义一个分析器
          "type": "custom", 
          "tokenizer": "standard",  #使用标准分析词
          "char_filter": [     #使用char_filter字符过滤器
            "html_strip"
          ],
          "filter": [        #使用filter过滤器
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}

    使用自定义分析器分词

POST my-index-000001/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "Is this <b>déjà vu</b>?"
}

    查看分词结果: [ is,this,deja,vu]

 

  示例2:自定义一个复杂分析器,它结合了以下内容:

    1)char_filter字符过滤器:自定义Mapping Character Filter映射:

      :)   符号映射为  _happy_ 

      :(   符号映射为  _sad_ 

    2) tokenizer分词器:自定义Pattern 模式分词器

    3) filter令牌过滤器:  lowercase转小写,自定义过滤停用词

    定义分析器结构:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {   #自定义一个分析器
          "char_filter": [
            "emoticons"           #自定义自符过滤器
          ],
          "tokenizer": "punctuation",     #自定义一个分词器
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {          
        "punctuation": {           #模式分词器的配置
          "type": "pattern",
          "pattern": "[ .,!?]"     #以里面符号来分词
        }
      },
      "char_filter": {         #字符过滤器的配置映射
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {           #令牌过滤器的配置,过滤停用词
        "english_stop": {  
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}

    使用自定义的分析器分词

POST my-index-000001/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "I'm a :) person, and you?"
}

    查看分词结果:[ i'm, _happy_, person,you]

 

参考官方资料:Create a custom analyzer

 

posted on 2024-04-11 11:52  花阴偷移  阅读(90)  评论(0编辑  收藏  举报

导航