首页 > 其他分享 >ES 自定义分析器

ES 自定义分析器

时间:2022-10-16 12:01:38浏览次数:40  
标签:Tokenizer 自定义 分析器 Filter Token token offset type ES

分析器的组成

一个分析器由三部分组成:Character Filter/Tokenizer/Token Filer

Character Filters

  • 在Tokenizer之前对文本进行处理,可以配置多个Character Filter。
  • ES自带的Character Filter:HTML strip、Mapping、Pattern replace

Tokenizer

  • 将原始的文本按照一定规则切分词
  • ES自带的Tokenizer:whitespace、standard、uax_url_email、pattern、keyword、path hierachy

Token Filter

  • 将Tokenizer输出的单词进行增加,修改,删除
  • ES自带的Token Filters:Lowercase、stop、synonym

自定义分析器

如果现有的分析器不能满足需求,可以针对索引自定义分析器,一个完整的分析器包括如下三部分

  • 0个或多个 character filters (字符过滤器 )
  • 1个分词器tokenizer(分词器)
  • 0个或多个token filters

分析器的工作顺序也是如此,首先 character filters 工作,过滤掉规则匹配的无效字符,然后进行分词,最后对分词进行过滤

案例一: 有HTML和ASCII信息的语句用标准分词器处理,并小写转换过滤

  • Character Filter - HTML Strip Character Filter
  • Tokenizer - Standard Tokenizer
  • Token Filters - Lowercase Token Filter ,ASCII-Folding Token Filter
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type":      "custom", 
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}

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

##输出结果为
{
  "tokens" : [
    {
      "token" : "is",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "this",
      "start_offset" : 3,
      "end_offset" : 7,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "deja",
      "start_offset" : 11,
      "end_offset" : 15,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "vu",
      "start_offset" : 16,
      "end_offset" : 22,
      "type" : "<ALPHANUM>",
      "position" : 3
    }
  ]
}

案例二:映射处理符号语句,并使用pattern分词,小写转换,过滤停用词

  • Character Filter - Mapping Character Filter
  • Tokenizer - Pattern Tokenizer
  • Token Filters - Lowercase Token Filter ,Stop Token Filter
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": { 
          "type": "custom",
          "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/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text":     "I'm a :) person, and you?"
}


## 输出结果为
{
  "tokens" : [
    {
      "token" : "i'm",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "_happy_",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "person",
      "start_offset" : 9,
      "end_offset" : 15,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "you",
      "start_offset" : 21,
      "end_offset" : 24,
      "type" : "word",
      "position" : 5
    }
  ]
}

标签:Tokenizer,自定义,分析器,Filter,Token,token,offset,type,ES
From: https://www.cnblogs.com/tenic/p/16795906.html

相关文章

  • SpringBoot整合ES查询
    springboot整个es有很多钟方法,比如TransportClient、RestClient、RestHighLevelClient、SpringData-Es、Elasticsearch-SQL等。ElasticSearch官方提供了3个Client,具体......
  • ES大数据量的分页查询
    FROM/SIZE分页查询默认情况下,不加from,size的话,ES会返回前10条记录。加上from,size就会查询指定的条数。其中from代表起始行号,size代表查询行数。如果用JAVA等Client端传参......
  • ES的过滤查询
    ES的查询类型和特性查询(query):默认会计算每个返回文档的得分,然后根据得分排序过滤(filter):筛查出符合条件的文档,并且不计算得分,还可以缓存文档注意:filter过滤查询必须要......
  • ES聚合查询
    Elasticsearch的聚合查询分为四大类,分别是BucketAggregation、MetricAggregation、PipelineAggregation、MatrixAggregration。具体的四大类都是什么意思呢?都是怎么运......
  • 自定义动画
    defbfi(a):#只能在xxp()中使用li=[]foriina:i.set(sheen_direction=d)......
  • ES中的DSL语句操作
    ES中的查询分为URISearch、RequestBodySearch。URISearch-在URL中使用查询参数。RequestBodySearch-使用JSON格式的入参作为查询条件。DSL语句就是基于Reques......
  • ES中的一些基本概念以及和关系数据库对比
    以下总结点为自己思路总结,有不正确地方,请斧正。ES中的基本概念一……索引索引:存放在ES中同一个类型文档的集合叫做ES中的索引,类似于关系数据库中的TableES中的基......
  • kubernetes学习笔记4-pod
    Pod资源定义​自主式pod资源,很少用到,手动创建的资源,用kubectldelete后不会自动创建,而使用pod控制器管理的才会按照用户期望的重新创建;​资源清单:一级字段(apiVersion|kind|m......
  • 绝杀processOn,这款UML画图神器,阿里字节都用疯了,你还不知道?
    大家好,我是陶朱公Boy,又和大家见面了。前言在文章开始前,想先问大家一个问题,大家平时在项目需求评审完后,是直接开始编码了呢?还是会先写详细设计文档,后再开始进行编码开发......
  • 关于自定义事件父子组件传值问题 $event
    1.$event是vue提供的特殊变量,用来表示原生的事件参数对象event1.1在原生事件中,$event是事件对象可以点出来属性 2.在原生事件中,$event是事件对象,在自定义事件中,$ev......