Elasticsearch自定义分析器analyzer分词实践

简介: Elasticsearch自定义分析器analyzer分词实践

基础知识回顾

分析器的组成结构:

分析器(analyzer)
  - Character filters (字符过滤器)0个或多个
  - Tokenizer (分词器)有且只有一个
  - Token filters (token过滤器)0个或多个

31.1.png


内置分析器

1、whitespace 空白符分词

POST _analyze
{
  "analyzer": "whitespace", 
  "text": "你好 世界"
}
{
  "tokens": [
    {
      "token": "你好",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "世界",
      "start_offset": 3,
      "end_offset": 5,
      "type": "word",
      "position": 1
    }
  ]
}

2、pattern正则表达式分词,默认表达式是\w+(非单词字符)

配置参数

pattern  :  一个Java正则表达式,默认 \W+
flags  :  Java正则表达式flags。比如:CASE_INSENSITIVE 、COMMENTS
lowercase  :  是否将terms全部转成小写。默认true
stopwords  :  一个预定义的停止词列表,或者包含停止词的一个列表。默认是 _none_
stopwords_path  :  停止词文件路径
// 拆分中文不正常
POST _analyze
{
  "analyzer": "pattern", 
  "text": "你好世界"
}
{
  "tokens": []
}
// 拆分英文正常
POST _analyze
{
  "analyzer": "pattern", 
  "text": "hello world"
}
{
  "tokens": [
    {
      "token": "hello",
      "start_offset": 0,
      "end_offset": 5,
      "type": "word",
      "position": 0
    },
    {
      "token": "world",
      "start_offset": 6,
      "end_offset": 11,
      "type": "word",
      "position": 1
    }
  ]
}
// 在索引上自定义分析器-竖线分隔
PUT my-blog
{
  "settings": {
    "analysis": {
      "analyzer": {
        "vertical_line": {
          "type": "pattern",
          "pattern": "\\|"
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "vertical_line"
        }
      }
    }
  }
}
// 测试索引分析器 
POST /blog-v4/_analyze
{
  "analyzer": "vertical_line",
  "text": "你好|世界"
}
POST /blog-v4/_analyze
{
  "field": "content",
  "text": "你好|世界"
}
// 两者结果都是
{
  "tokens": [
    {
      "token": "你好",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "世界",
      "start_offset": 3,
      "end_offset": 5,
      "type": "word",
      "position": 1
    }
  ]
}

参考

Elasticsearch 分词器

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
10月前
|
人工智能 自然语言处理 语音技术
Step-Audio:开源语音交互新标杆!这个国产AI能说方言会rap,1个模型搞定ASR+TTS+角色扮演
Step-Audio 是由阶跃星辰团队推出的开源语音交互模型,支持多语言、方言和情感表达,能够实现高质量的语音识别、对话和合成。本文将详细介绍其核心功能和技术原理。
1487 91
Step-Audio:开源语音交互新标杆!这个国产AI能说方言会rap,1个模型搞定ASR+TTS+角色扮演
|
机器学习/深度学习 数据采集 人工智能
深度学习的魔法:用神经网络识别手写数字
本文将引导读者了解如何使用深度学习技术,特别是卷积神经网络(CNN)来识别手写数字。我们将从基础理论出发,逐步深入到实际操作,包括数据的预处理、模型的构建和训练,以及结果的评估。通过本文,读者不仅能掌握使用深度学习进行图像识别的技能,还能理解其背后的原理。让我们一同揭开深度学习的神秘面纱,探索其在图像处理领域的无限可能。
|
机器学习/深度学习 数据中心 芯片
【AI系统】谷歌 TPU 历史发展
本文详细介绍了谷歌TPU的发展历程及其在AI领域的应用。TPU是谷歌为加速机器学习任务设计的专用集成电路,自2016年首次推出以来,经历了多次迭代升级,包括TPU v1、v2、v3、v4及Edge TPU等版本。文章分析了各代TPU的技术革新,如低精度计算、脉动阵列、专用硬件设计等,并探讨了TPU在数据中心和边缘计算中的实际应用效果,以及谷歌如何通过TPU推动移动计算体验的进步。
832 1
【AI系统】谷歌 TPU 历史发展
|
存储 监控 NoSQL
Celery是一个基于分布式消息传递的异步任务队列/作业队列
Celery是一个基于分布式消息传递的异步任务队列/作业队列
|
消息中间件 Java Kafka
集成Kafka到Spring Boot项目中的步骤和配置
集成Kafka到Spring Boot项目中的步骤和配置
1414 7
|
安全 网络安全 网络虚拟化
虚拟网络设备的网络隔离机制:原理、意义与应用场景深度分析
虚拟网络设备在现代网络架构中扮演着重要角色🌐,尤其是在实现网络隔离方面🛡️。网络隔离是网络安全🔒和多租户环境管理的关键组成部分,它能够确保不同网络流量的分离🚦,保护敏感数据💾,减少攻击面。虚拟网络设备通过在软件层面上模拟物理网络设备的行为,提供了一种灵活且成本效益高的方式来实现这些目标。本文将从多个维度深入分析虚拟网络设备是如何隔离网络的,这种隔离有什么实际意义,为什么需要虚拟网络设备来隔离网络,以及在什么场景下比较适合使用虚拟网络设备隔离网络。
|
开发工具 git Python
Python 的软件开发实践:如何使用 Git 在团队中协同开发 Python 项目?
Python 的软件开发实践:如何使用 Git 在团队中协同开发 Python 项目?
344 1
|
机器学习/深度学习 自然语言处理 算法
如何利用机器翻译技术进行跨语言沟通?
如何利用机器翻译技术进行跨语言沟通?【7月更文挑战第8天】
404 3
|
存储 算法 异构计算
SR锁存器与D锁存器设计与建模
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
518 0
SR锁存器与D锁存器设计与建模