ElasticSearch中常见的分词器介绍

这篇具有很好参考价值的文章主要介绍了ElasticSearch中常见的分词器介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ElasticSearch中常见的分词器介绍

前言

ElasticSearch是一个高效的分布式搜索引擎,其中分词器是它的核心组件之一,平常开发中选择一个合适的分词器可以很大程度上提高检索效率,所以特意花点时间快速了解ElasticSearch中各大常见的分词器,本文也将分别介绍ElasticSearch中常见的几大分词器的特点、适用场景,以及如何使用

推荐阅读

  • ElasticSearch快速入门_知识汲取者的博客-CSDN博客

分词器的作用

分词器是在搜索引擎和文本处理中起关键作用的组件,它负责将文本切分成一个个有意义的词语,以建立索引或进行搜索和分析。

上面可能说的有一些太官方了,详细点说就是,ES搜索引擎是根据词条进行检索的,这里的词条相当于MySQL中的索引,是ElasticSearch能实现海量数据高效检索的核心,在MySQL中,如果我们不恰当的建立索引,就会影响数据库的查询性能,比如我们为区分度不大的字段建立索引,SQL优化器评测发现走索引性能和全表扫描的性能差不多,这时候就直接进行全表扫描了,此时索引就一点作用都没有了,同理这个分词也是一样的道理,他都目的也是将一个一句话分成若干个词条,以词条为索引,以此来提高检索的效率和检索的正确性

再举一个实际的例子,比如这里有一句话“他们在商店买了一些苹果手机和一些苹果”,如果我们分词时将苹果手机进行拆分,我们搜索苹果手机,可能无法搜索出带有苹果手机的文档

他们 在 商店 买 一些 苹果 手机 和 一些 苹果

而一下的分词,则可以正确搜索出带有苹果手机的词条

他们 在 商店 买 了 一些 苹果手机 和 一些 苹果
  • 文本切分: 分词器根据一定的规则将文本切分为单个的词语或词汇单元。这个过程通常涉及到处理空格、标点符号、停用词等。
  • 标准化: 分词器可以对词语进行标准化,例如将所有字符转为小写,以实现大小写不敏感的搜索。这有助于提高搜索的准确性。
  • 去除停用词: 分词器通常会去除一些常见的停用词,这些词语在搜索中往往没有实际的意义,例如 “and”, “the”, “is” 等。
  • 词干化: 对于词语的各种形式(如单数和复数、动词的不同时态等),分词器可以将它们转化为同一个基本形式,以提高搜索的准确性。
  • 自定义规则: 分词器允许用户根据具体需求定义自己的切分规则、标准化规则等,以适应特定的搜索场景。
  • 支持多语言: 对于全球化的应用,分词器能够支持多种语言,包括中文、英文、法文等,以确保对不同语言的文本都能有效地进行处理。
  • 支持搜索建议: 通过使用边缘 n-gram 等技术,分词器可以支持搜索建议功能,提供更智能的搜索提示。

如何指定分词器

  • 方式一:创建索引时,通过映射直接指定分词器

    PUT /your_index_name
    {
      "mappings": {
        "properties": {
          "your_field_name": {
            "type": "text",
            "analyzer": "your_analyzer_name"
          },
          // other fields...
        }
      }
    }
    
  • 方式二:修改索引时,通过修改映射修改分词器

    PUT /your_index_name/_mapping
    {
      "properties": {
        "your_field_name": {
          "type": "text",
          "analyzer": "your_analyzer_name"
        },
        // other fields...
      }
    }
    

注意

  1. 如果不指定分词器,则默认使用标准分词器 standard
  2. 不同的字段可以使用不同的分词器,根据实际需求选择适当的分词策略
  3. ElasticSearch默认自带Standard AnalyzerWhitespace AnalyzerSimple AnalyzerKeyword AnalyzerStop Analyzer等分词器,其它分词器,比如:IK Analyzer需要手动下载

分词器的组成

分词器主要由以下三部分组成

  • Character Filters(字符过滤器):这一步针对原始文本进行预处理,对文本中的字符进行修改或删除。例如,去除 HTML 标签、替换特定字符等。
  • Tokenizer(分词器):分词器将经过字符过滤器处理后的文本切分成一个个的词条,形成一个词条流。切分的规则可以是按空格、标点符号等,或者根据某种特定的算法,比如边缘 n-gram。
  • Token Filters(词汇过滤器):这一步对切分后的词条流进行进一步的处理。可以进行词条的大小写转换、删除停用词(常用但无实际意义的词语)、词干化等操作。词汇过滤器对于调整文本以适应索引和搜索的需求非常重要。

elasticsearch 分词器,数据库,# ElasticSearch,elasticsearch,搜索引擎

分词器的类型

分词器 分词依据 特点
Standard Analyzer 空格、标点符号 小写化处理、过滤符号
Whitespace Analyzer 空格 不进行小写化处理、保留所有字符
Simple Analyzer 非字母(符号、数字) 小写化处理、过滤符号、支持中文拼音分词
Keyword Analyzer 将整个输入作为一个词条
Stop Analyzer 空格 小写化处理、过滤停用词
IK Analyzer 词典 中文分词
Edge NGram Analyzer n-gram 按指定步长进行分词
Pattern Analyzer 正则匹配字符 较为灵活
Language Analyzer 空格 支持多国语言
Custom Analyzer 自定义 灵活

标准分词器

  • Standard Analyzer(默认):

    • 类型: standard
    • 特点:
      1. 根据空格和标点符号分割文本
      2. 进行小写化处理
      3. 过滤符号
    • 适用场景:适用于通用的全文搜索

    示例

    原始文本:"The quick brown fox jumps over the lazy dog."
    分词结果:["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
    

空格分词器

  • Whitespace Analyzer:

    • 类型: whitespace
    • 特点:
      1. 根据空格分割文本
      2. 不进行小写化
      3. 保留所有字符
    • 适用场景:适用于不需要额外处理的精确匹配场景。

    示例

    原始文本:"The quick brown fox jumps over the lazy dog."
    分词结果:["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]
    

简单分词器

  • Simple Analyzer:

    • 类型: simple

    • 特点:

      1. 按非字母切分
      2. 连续的数字为一个词条
      3. 进行小写处理
      4. 过滤符号
      5. 中文字单独建索引,并且把中文字转成拼音后也建搜索,这样就能同时支持中文和拼音检索。另外把拼音首字母也建索引,这样搜索 zjl 就能命中 “周杰伦”。
    • 适用场景:适用一些简单的中文分词

    示例

    原始文本:"The quick brown fox jumps over the lazy dog."
    分词结果:["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
    

关键词分词器

  • Keyword Analyzer:

    • 类型: keyword
    • 特点: 将整个输入视为单个关键字,不进行分词。
    • 适用场景:适用于不需要分词的场景,比如精确匹配。

    示例

    原始文本:"The quick brown fox jumps over the lazy dog."
    分词结果:["The quick brown fox jumps over the lazy dog."]
    

停用词分词器

  • Stop Analyzer:

    • 类型: stop
    • 特点:
      1. 去除停用词(is、a、the……)
      2. 根据空格分割文本
      3. 进行小写化处理。
    • 适用场景:适用于需要去除常见停用词的场景。

    示例

    原始文本:"The quick brown fox jumps over the lazy dog."
    分词结果:["quick", "brown", "fox", "jumps", "over", "lazy", "dog"]
    

IK分词器

  • IK Analyzer:

    详情请参考:https://github.com/medcl/elasticsearch-analysis-ik

    • 类型:
      • ik_max_word :会将文本做最细粒度的拆分,会穷尽各种可能的组合,适合 Term Query
      • ik_smart:会做最粗粒度的拆分,不会对同一个词进行重复分词,适合 Phrase 查询
    • 适用场景:适用于中文文本分析。

    示例

    原始文本:"中华人民共和国国歌"
    ik_max_word分词结果:["中华人民共和国", "中华人民", "中华", "华人", "人民共和国", "人民", "人", "民", "共和国", "共和", "和", "国国", "国歌"]
    ik_smart分词结果:["中华人民共和国", "国歌"]
    
  • ik分词器的使用步骤

    • Step1:下载ik分词器
    • Step2:将下载的压缩包解压到 Elasticsearch 插件目录(plugins 文件夹)中
    • Step3:重启ElasticSearch
    • Step4:直接指定即可

NGram分词器

  • NGram Analyzer:

    详情参考:ElasticSearch之ngram分词器-CSDN博客

    • 类型:

      • edge_ngram:从单词的开头提取 n-gram
      • ngram:在整个单词中提取 n-gram
    • 适用场景:适用于前缀搜索和搜索建议

    示例

    原始文本:"I am Chinese."
    
    edge_ngram分词结果:
    n=2(bigram): ["I am", "am Chinese."]
    n=3(trigram): ["I am Chinese."]
    n=4(four-gram): ["I am Chinese."]
    
    ngram分词结果:
    n=2(bigram): ["I am", "am Chinese."]
    n=3(trigram): ["I am Chinese."]
    n=4(four-gram): ["I am Chinese."]
    

    备注:

    1. NGram Analyzer 不会过滤符号
    2. NGram Analyzer默认的步长是1
    {
      "settings": {
        // 创建分词器
        "analysis": {
          "analyzer": {
            "my_edge_ngram_analyzer": {
              "tokenizer": "standard", // 指定分词器
              "filter": ["my_edge_ngram_filter"] // 指定词汇过滤器
            }
          },
          "filter": {
            "my_edge_ngram_filter": {
              "type": "edge_ngram",
              "min_gram": 1, // 词汇最小长度为一个字符,注意:一个单词、数字、中文都是一个字符
              "max_gram": 10 // 词汇最大长度为10个字符
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "content": {
            "type": "text",
            "analyzer": "my_edge_ngram_analyzer" // 使用我们配置的分词器
          }
        }
      }
    }
    

    知识拓展:n-gram 概念

    n-gram 是一种文本处理的方法,其中 “n” 表示包含的元素的数量。在自然语言处理和信息检索中,n-gram 通常指的是连续的 n 个单词(或字符)序列。

    • Unigram(1-gram): 包含一个单词的序列。例如,对于句子 “The quick brown fox”,每个单词都是一个 unigram。
    • Bigram(2-gram): 包含两个相邻单词的序列。例如,对于句子 “The quick brown fox”,bigrams 包括 “The quick”、“quick brown”、“brown fox”。
    • Trigram(3-gram): 包含三个相邻单词的序列。例如,对于句子 “The quick brown fox”,trigrams 包括 “The quick brown”、“quick brown fox”。

    这个 n 表示按照几个单词来进行划分

正则匹配分词器

  • Pattern Analyzer
    • 类型pattern
    • 特点:根据正则匹配进行分词
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_pattern_analyzer": {
          "type": "pattern",
          "pattern": "\\W+"  // 正则表达式模式,表示使用非单词字符作为分隔符
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "my_pattern_analyzer"
      }
    }
  }
}

上诉配置的 Pattern Analyzer 与 Standard Analyzer的效果是一模一样的

语言分词器

  • Language Analyzer
    • 类型
      • english:英语分词器
      • french:法语分词器
    • 特点
      1. 支持多个不同国家语言的分词,但就是没有支持中文的(中文分词器还得靠国内大佬或机构开发)
      2. 应用英文的 Stop Analyzer(停用词过滤器)
      3. 单词小写化
      4. 不会过滤符号
    • 适用场景:一些国际化的软件可能会用,但是面向国内用户基本上用不上
{
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "english"
      }
    }
  }
}

原始文本:"The quick brown fox jumps over the lazy dog."
分词结果:["quick", "brown", "fox", "jumps", "over", "lazy", "dog"]

自定义分词器

  • Custom Analyzer:

    • 类型: custom

    • 特点: 可以根据具体需求自定义分词器,包括指定分词器、字符过滤器、标记过滤器等。

    • 适用场景:现有分词器不满足当前功能,或者想要实现更加高效且灵活的分词

  • 实现自定义分词器的步骤

    • Step1定义字符过滤器(Char Filter),可以通过字符过滤器执行预处理,例如删除 HTML 标签或进行字符替换。
    • Step2定义分词器(Tokenizer), 分词器负责将文本切分为单词或词条。可以选择现有的分词器,也可以创建自定义的分词逻辑。
    • Step3定义词汇过滤器(Token Filter) ,可以通过词汇过滤器对切分后的单词进行进一步处理,例如小写处理、停用词过滤、同义词处理等。
    • Step4创建 Custom Analyzer ,将定义的字符过滤器、分词器和词汇过滤器组合成一个自定义的 Custom Analyzer
    • Step5将 Custom Analyzer 应用到字段 ,在创建索引时,将自定义的 Custom Analyzer 分配给相应的字段。

示例

在下面的示例中,my_analyzer 是一个自定义的 Custom Analyzer,包含了一个 HTML 标签过滤器、标准分词器和小写过滤器。该分析器被应用于名为 “content” 的字段。实际上,你可以根据需求自定义各个组件,以满足你的分词需求。

{
  "settings": {
    "analysis": {
      // 指定字符过滤器
      "char_filter": {
        "my_char_filter": {
          "type": "html_strip" // 去除文本中的 HTML 标签的字符过滤器
        }
      },
      // 指定分词器
      "tokenizer": {
        "my_tokenizer": {
          "type": "standard" // 指定标准分词器,按照标准分词器进行分词
        }
      },
      // 指定词汇过滤器
      "filter": {
        "my_filter": {
          "type": "lowercase" // 小写化处理
        }
      },
      // 创建自定义分词器
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "char_filter": ["my_char_filter"],
          "tokenizer": "my_tokenizer",
          "filter": ["my_filter"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": { // 给 content 字段应用 自定义分词器
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}
原始文本:<p>This is <strong>bold</strong> text.</p>
分词结果:["this", "is", "bold", "text"]

参考资料文章来源地址https://www.toymoban.com/news/detail-858715.html

  • Anatomy of an analyzer | Elasticsearch Guide 8.11| Elastic
  • ElasticSearch 分词器,了解一下 - 知乎 (zhihu.com)

到了这里,关于ElasticSearch中常见的分词器介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch-IK分词器介绍和下载

    什么是IK分词器? 分词:把一段中文或者别的划分成一个一个的,我们在搜索的时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如\\\"我爱魏一鹤\\\"会被分成\\\"我\\\",“爱”,“魏”,“一”

    2024年02月11日
    浏览(38)
  • Elasticsearch中倒排索引、分词器、DSL语法使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 简介及安装请查看这篇 :Elasticsea

    2024年02月11日
    浏览(50)
  • Java项目(二)--Springboot + ElasticSearch 构建博客检索系统(3)- 分词器介绍

    ES作为全文检索服务,势必要对原始的文本进行内容的拆分,才能进行有效的索引。而拆分原始内容到一个一个小的词,或语义单元,这部分的功能由ES的分词器去完成的。 常见分词器 standard:ES默认的分词器,会将词汇单元进行小写形式,并且去除一些停用词和标点符号等等

    2024年02月10日
    浏览(41)
  • 60、Flink CDC 入门介绍及Streaming ELT示例(同步Mysql数据库数据到Elasticsearch)-CDC Connector介绍及示例 (1)

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月19日
    浏览(51)
  • elasticsearch 8 修改分词器并数据迁移

    下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 注意:版本要和ES版本对应 解压后放入plugins文件中 然后重启服务: docker-compose restart elasticsearch ,大概需要1分钟 当索引存在时不能修改已有索引分词器,会出现错误: 因此需要进行一下步骤: 使用新的 mappings 创建新

    2024年02月07日
    浏览(41)
  • ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

    官方文档 = 聚合 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合:对文档信息的统计、分类、运算。类似mysql sum、avg、count 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组(相当于mysql group by) Date Histogram:按照日期阶梯分组,

    2024年02月12日
    浏览(36)
  • 【ElasticSearch】分词器(ElasticSearchIK分词器)

    •IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包 •是一个基于Maven构建的项目 •具有60万字/秒的高速处理能力 •支持用户词典扩展定义 IK 分词器安装 IK分词器有两种分词模式:ik_max_word 和 ik_smart 模式。 1、 ik_max_word 会将文本做最细粒度的拆分,比如会

    2024年02月04日
    浏览(38)
  • ElasticSearch-使用IK分词器进行分词

    使用KIbana测试IK分词器 打开开发工具台 ik_smart 最少分词器 分词结果比较少 ik_max_word 颗粒度最细分词器 分词结果比较多,组成各种结果,穷尽词库的可能! 再看个例子,把我们的句子换成 超级喜欢魏一鹤学习Java 首先看最少分词 然后是最细颗粒度分词 问题来了 我们输入超级喜

    2024年02月13日
    浏览(41)
  • Elasticsearch 全文检索 分词检索-Elasticsearch文章四

    https://www.elastic.co/guide/en/enterprise-search/current/start.html https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query.html Full text Query中,我们只需要把如下的那么多点分为3大类,你的体系能力会大大提升 很多api都可以查得到,我们只要大概知道有支持哪些功能 Elasticsearch 执行

    2024年02月14日
    浏览(53)
  • 自定义分词器:ElasticSearch自定义分词器

    自定义分词器:ElasticSearch自定义分词器 ElasticSearch是一个开源的搜索和分析引擎,它提供了实时的、可扩展的、高性能的搜索功能。ElasticSearch使用Lucene库作为底层搜索引擎,它提供了强大的文本分析和搜索功能。在ElasticSearch中,分词器是将文本拆分为单词的过程,它是搜索

    2024年02月20日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包