当前位置: 首页 > article >正文

ES分词技术

Elasticsearch(ES)的搜索功能依赖于分词技术,分词是将文本拆分为单个词或词项的过程,直接影响搜索的准确性和效率。以下是ES中分词技术的详细介绍:

1. 分词器(Analyzer)

分词器是分词的核心组件,通常由以下三部分组成:

  • 字符过滤器(Character Filters):预处理文本,如去除HTML标签。
  • 分词器(Tokenizer):将文本拆分为词项。
  • 词项过滤器(Token Filters):对词项进行处理,如小写转换、去除停用词。

2. 内置分词器

ES提供了多种内置分词器,常见的有:

  • Standard Analyzer:默认分词器,按空格和标点分词,支持多语言。
  • Simple Analyzer:按非字母字符分词,并将词项转为小写。
  • Whitespace Analyzer:仅按空格分词,不转换大小写。
  • Keyword Analyzer:将整个文本作为一个词项,适用于精确匹配。
  • Pattern Analyzer:使用正则表达式分词。
  • Language Analyzers:针对特定语言优化,如英语、中文。

3. 自定义分词器

用户可以根据需求自定义分词器,配置如下:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "char_filter": ["html_strip"],
          "filter": ["lowercase", "my_custom_filter"]
        }
      },
      "filter": {
        "my_custom_filter": {
          "type": "stop",
          "stopwords": ["and", "the"]
        }
      }
    }
  }
}

4. 分词过程

分词过程包括以下步骤:

  1. 字符过滤:预处理文本。
  2. 分词:将文本拆分为词项。
  3. 词项过滤:进一步处理词项。

5. 中文分词

中文分词较为复杂,常用插件有:

  • IK Analyzer:支持细粒度和智能分词模式。
  • Jieba Analyzer:基于结巴分词,支持自定义词典。

6. 使用示例

6.1 创建索引并指定分词器
PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}
6.2 测试分词器
POST /my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "这是一个分词测试"
}

7. 总结

ES的分词技术通过字符过滤、分词和词项过滤等步骤,结合内置和自定义分词器,支持多种语言和复杂需求。中文分词则依赖插件如IK Analyzer和Jieba Analyzer。合理配置分词器能显著提升搜索效果。


http://www.kler.cn/a/549985.html

相关文章:

  • kkFileView二开之pdf转图片接口
  • Kafka 为什么会丢消息?如何保证消息不丢失?
  • Java GC 基础知识快速回顾
  • TK矩阵系统:全面提升TikTok运营效率的智能化工具
  • 【Vue3 入门到实战】16. Vue3 非兼容性改变
  • 最新智能优化算法:牛优化( Ox Optimizer,OX)算法求解经典23个函数测试集,MATLAB代码
  • 缓存穿透、缓存击穿、缓存雪崩的区别与解决方案
  • 【transformers.Trainer填坑】在自定义compute_metrics时logits和labels数据维度不一致问题
  • 基于LSTM的情感分析
  • Dockerfile 编写推荐
  • SQL-leetcode—1683. 无效的推文
  • Linux Mem -- AArch64 MTE功能Tag寄存器
  • Redis五种用途
  • 【LeetCode】15.三数之和
  • TDengine 数据备份/还原工具 taosdump
  • vue点击左边导航,右边出现页面步骤
  • 【GO】Golang/C++混合编程 - 初识
  • Linux 目录结构与基础命令学习记录
  • Spring AI发布!让Java紧跟AI赛道!
  • openEuler 22.03 LTS SP4源码编译部署OpenStack-Dalmatian