es-4-自定义分析器

分析器

可以直接定义在settings下analysis下的几个属性:

  1. Analyzer由Charactor Filter—>Tokenizer—>Token Filter三部分组成。
  2. Normalizer:规整器,它没有分词器,只有字符过滤器和分词过滤器。例如对keyword类型做标准化处理。
  3. Charactor Filter:字符过滤器,去掉文本原始的一些字符,例如html标签等。可以有多个
  4. Tokenizer:分词器,将上一步处理完的全文数据根据一定的规则拆分成词项。
  5. Token Filter:分词过滤器,转换分词后产生的所有词项,例如将分词转为小写,取出的、地、得等停用词,没有Tokenizer。

其中1是组装2345的,2和3是用于数据加入ES时处理原始数据的,4是用于2、3处理后分词的,5是用于4分词后产生的词项进行操作。

  1. Analyzer用于非keyword类型的字段,给keyword类型字段设置了analyzer,该字段会不会分词,keyword类型是不能设置analyzer的,该类型下没有该属性,强行设置会直接报错。
  2. Normalizer只用于keyword类型的字段,除了keyword类型,其他类型字段不能设置normalizer。
  3. 当查询设置了normalizer属性的keyword类型字段时,其normalizer也会作用到查询词上。

设置和查询分析器的两个restful的api,分别是_setting和_analyze

内置过滤器

  • html_strip:html标签过滤器
    在这里插入图片描述

  • lowercase:忽略大小写

    在这里插入图片描述

  • synonyms:同义词过滤,这个过滤器也支持指定近义词路径参数synonyms_path

    http://localhost:9560/test_index_1/_settings/
    {
      "index":  {
      "analysis":{
                    "filter":{
                        "my_synonyms_filter": {
                            "type": "synonym_graph",
                            "synonyms": [
                                "China, chn"
                            ]
                        }
                    },
                    "analyzer":{
                        "my_synonyms_analyzer": {
                            "filter": [
                                "my_synonyms_filter"
                            ], "type":"custom", "tokenizer":"ik_smart"
                        }
                    }
                }
    	}
    }
    
    

    在这里插入图片描述

  • pattern_replace:正则替换,将所有非数字或字母都替换为空值。

    {
        "index":{
            "analysis":{
                "char_filter":{
                    "patternFilter":{
                        "pattern":"[^A-Za-z0-9]",
                        "type":"pattern_replace",
                        "replacement":""
                    }
                }
            }
        }
    }
    

在这里插入图片描述

内置分析器、分词器

  • standard:根据Unicode文本分段算法,这个会把中文的话就把中文拆成一个字一个字的了,可能会造成冗余结果。还支持设置参数stopwordsstopwords_pathmax_token_length

    {
        "index":{
            "analysis":{
                "analyzer":{
                    "my_standrad_analyzer":{
                        "type":"standard",
                        "max_token_length":5,
                        "stopwords":"and,or"
                    }
                }
            }
        }
    }
    

    在这里插入图片描述

  • simple:将文本按照非字母字符进行拆分,并将分词转为小写。
    在这里插入图片描述

  • english:将英文单词的各种变形处理成单词原型。
    在这里插入图片描述

  • keyword:保留原始值不变
    在这里插入图片描述

  • whitespace:按照空格进行分词。
    在这里插入图片描述

  • classic:按照英语的语法进行分词,去掉一些碎词。比如:
    在这里插入图片描述

分词器

  • letter:在非字母位置上分割文本。
    在这里插入图片描述

  • pattern:使用正则表达式进行分词,默认值为\W+,匹配非单词字符(含中文)。支持配置一些额外参数。
    在这里插入图片描述
    在这里插入图片描述
    其他示例:

    {
      "settings": {
        "analysis": {
          "analyzer": {
            "email_analyzer":{
              "type":"pattern",
              "pattern":"\\W|_",
              "lowercase":true
            }
          }
        }
      }
    
  • uax_url_email:按照文本中的url,邮箱地址去做分词。
    在这里插入图片描述

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html

拼音分词器:

git地址:https://github.com/medcl/elasticsearch-analysis-pinyin,相关参数配置:
在这里插入图片描述
总结如下:

  • keep_first_letter:刘德华—>ldh,默认值为true
  • keep_separate_first_letter:刘德华—>l,d,h,默认为false
  • limit_first_letter_length:设置first_letter结果的最大长度,默认长度16
  • keep_full_pinyin:刘德华—> liu,de,hua,默认为true
  • keep_joined_full_pinyin:刘德华—>liudehua,默认为false
  • keep_none_chinese:非中文字不分词,默认为true
  • keep_none_chinese_together :将非中文放在一起,默认为true,DJ音乐家 -> DJ,yin,yue,jia,如果设置为false,DJ音乐家 -> D,J,yin,yue,jia
  • keep_none_chinese_in_first_letter :将非中文字母放在第一个字母中合成为一个分词,刘德华AT2016—>ldhat2016,默认为true
  • keep_none_chinese_in_joined_full_pinyin:保持非中文字母的完整拼音,刘德华2016—>liudehua2016,默认为false
  • none_chinese_pinyin_tokenize:将非中文字母(如果是拼音)的话拆分成一块一块的,默认为true,keep_none_chinese和keep_none_chinese_together应该首先启用。
  • keep_original:保留原始输入值,默认为false
  • lowercase:小写非中文字母,默认值为true
  • trim_whitespace:去空格,默认值为true
  • remove_duplicated_term:重复的词将会被删除,de的—>de,(正常de的—>dede),默认为false
  • ignore_pinyin_offset:没看懂
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值