ElasticSearch(7.2.2)-浅谈es的分词原理

简介:谈谈elasticsearch的分词原理

  • 我们创建个档

    PUT test/_doc/1
    {
    “msg”:“乔丹是篮球之神”
    }

  • 我们通过’乔丹’这个关键词来搜索这个档

    POST /test/_search
    {
    “query”: {
    “match”: {
    “msg”: “乔丹”
    }
    }
    }

我们发现能匹配档出来,那整个过程的原理是怎样的呢?

  • 我们来试下使中分词器

    PUT test/_mapping
    {
    “properties”: {
    “msg_chinese”: {
    “type”: “text”,
    “analyzer”: “ik_max_word”
    }
    }
    }

    POST test/_doc/1
    {
    “msg”:“乔丹是篮球之神”,
    “msg_chinese”:“乔丹是篮球之神”
    }

    POST /test/_search
    {
    “query”: {
    “match”: {
    “msg_chinese”: “乔”
    }
    }
    }

    POST /test/_search
    {
    “query”: {
    “match”: {
    “msg”: “乔”
    }
    }
    }

为什么同样是输’乔’,为什么msg能匹配出档,msg_chinese不能呢?

写时分词
  • 我们使来分析这个msg这个字段是怎样分词的

    POST test/_analyze
    {
    “field”: “msg”,
    “text”: “乔丹是篮球之神”
    }

分词结果

乔,丹,是,篮,球,之,神
  • 再来分析这个msg_chinese这个字段是怎样分词的

    POST test/_analyze
    {
    “field”: “msg_chinese”,
    “text”: “乔丹是篮球之神”
    }

分词结果

乔丹, 是, 篮球, 之神
  • 档写的时候会根据字段设置的分词器类型进分词,如果不指定就是默认的standard分词器。
  • 写时分词器需要在mapping中指定,且旦指定就不能再修改,若要修改必须重建索引。
读时分词
  • 由于读时分词器默认与写时分词器默认保持致,拿上的例,你搜索 msg 字段,那么读时分词器为 Standard ,搜索 msg_chinese 时分词器则为 ik_max_word。这种默认设定也是常容易理解的,读写采致的分词器,才能尽最可能保证分词的结果是可以匹配的。

  • 允许读时分词器单独设置

    POST test/_search
    {
    “query”: {
    “match”: {
    “msg_chinese”: {
    “query”: “乔丹”,
    “analyzer”: “standard”
    }
    }
    }
    }

  • 般来讲不需要特别指定读时分词器,如果读的时候不单独设置分词器,那么读时分词器的验证法与写时致。

深分析

在这里插入图片描述

  • 分析器(analyzer)有三部分组成

    • char filter : 字符过滤器
    • tokenizer : 分词器
    • token filter :token过滤器
  • char filter(字符过滤器)

    • 字符过滤器以字符流的形式接收原始本,并可以通过添加、删除或更改字符来转换该流。个分析器可能有0个或多个字符过滤器。
  • tokenizer (分词器)

    • 个分词器接收个字符流,并将其拆分成单个token (通常是单个单词),并输出个token流。如使whitespace分词器当遇到空格的时候会将本拆分成token。“eating an apple” >> [eating, and, apple]。个分析器必须只能有个分词器

    POST _analyze
    {
    “text”: “eating an apple”,
    “analyzer”: “whitespace”
    }

  • token filter (token过滤器)

    • token过滤器接收token流,并且可能会添加、删除或更改tokens。如个lower case token filter可以将所有的token转成写。个分析器可能有0个或多个token过滤器,它们按顺序应。
standard分析器
  • tokenizer
    • Stanard tokenizer
  • token filters
    • Standard Token Filter
    • Lower Case Token Filter
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值