详解elasticsearch分词器

一、简介

随着云计算和大数据的普及,搜索引擎已经成为当今互联网技术的重要组成部分。elasticsearch作为开源全文搜索引擎,其分词器作为搜索引擎的核心组件,具有重要的作用。elasticsearch的分词器主要有以下三个部分:

  1. 字符过滤器:对原始输入和标记化的术语进行字符级处理,比如删除HTML标签、转换字符编码
  2. 分词器:将输入的文本拆分成单个单词(词项)的过程
  3. 标记过滤器:修改、删除或添加特定标记,比如stemming、lowercasing、stopwords

二、分词器的分类

elasticsearch分词器按照不同的算法可分为五种:

  1. Standard Analyzer(标准分词器):按照非字母符号或空格分词
  2. Simple Analyzer(简单分词器):按照非字母符号或空格分词,并忽略大小写
  3. Whitespace Analyzer(空格分词器):按照空格分词
  4. Keyword Analyzer(关键字分词器):将输入视作一个单一术语,常用于过滤或精确匹配查询
  5. Language-specific Analyzers(特定语言分词器):基于不同语言的特点进行分词,如中文分词、德语分词、法语分词等

三、中文分词器的使用

中文分词是一项复杂的任务,elasticsearch提供了多种中文分词器,比如IK分词器和smartcn分词器。下面是使用IK分词器进行中文分词的代码示例:

$ curl -X PUT "localhost:9200/test" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_max_word": { 
          "type": "custom",
          "tokenizer": "ik_max_word"
        },
        "ik_smart": {
          "type": "custom",
          "tokenizer": "ik_smart"
        }
      }
    }
  }
}
'

$ curl -X GET "localhost:9200/test/_analyze?pretty=true" -H 'Content-Type: application/json' -d'
{
  "analyzer": "ik_max_word",
  "text": "我是一名全能编程开发工程师"
}
'

// 返回结果:
{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "一名",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "全能",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "编程",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "开发",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "工程师",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 6
    }
  ]
}

四、标记过滤器的使用

标记过滤器用于修改、删除或添加特定标记,比如stemming、lowercasing、stopwords。下面是使用stopwords标记过滤器过滤“我是一个全能编程开发工程师”中停用词的代码示例:

PUT /stopwords_test
{
  "settings": {
    "analysis": {
      "filter": {
        "my_stopwords": {
          "type": "stop",
          "stopwords": ["我", "是", "一个"]
        }
      },
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "my_stopwords"]
        }
      }
    }
  }
}

GET /stopwords_test/_analyze
{
  "analyzer": "my_analyzer",
  "text": "我是一个全能编程开发工程师"
}

// 返回结果:
{
  "tokens": [
    {
      "token": "全能",
      "start_offset": 5,
      "end_offset": 7,
      "type": "",
      "position": 3
    },
    {
      "token": "编程",
      "start_offset": 7,
      "end_offset": 9,
      "type": "",
      "position": 4
    },
    {
      "token": "开发",
      "start_offset": 9,
      "end_offset": 11,
      "type": "",
      "position": 5
    },
    {
      "token": "工程师",
      "start_offset": 11,
      "end_offset": 14,
      "type": "",
      "position": 6
    }
  ]
}

五、结尾

以上是elasticsearch分词器的基本介绍和使用方法。不同的分词器和标记过滤器的使用场景不同,可以根据不同情况进行选择使用。希望这篇文章能够帮助到使用elasticsearch的开发工程师。

原创文章,作者:KDQKF,如若转载,请注明出处:https://www.506064.com/n/371741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KDQKFKDQKF
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相关推荐

  • Elasticsearch API使用用法介绍-get /_cat/allocation

    Elasticsearch是一个分布式的开源搜索和分析引擎,支持全文检索和数据分析,并且可伸缩到上百个节点,处理PB级结构化或非结构化数据。get /_cat/allocation…

    编程 2025-04-28
  • Elasticsearch Scroll Java的使用指南

    本文旨在详细介绍如何使用Elasticsearch Scroll Java。Elasticsearch Scroll Java是一种高效的遍历大型数据集的方法。通过它,我们可以逐个…

    编程 2025-04-27
  • Python英文分词:用法介绍与实现

    Python英文分词是自然语言处理中非常重要的一步,它将英文文本按照语义分解成一个一个的单词,为后续的文本分析和处理提供基础。本文将从多个方面阐述Python英文分词的实现方法及其…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论