带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)

简介: 带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(14) https://developer.aliyun.com/article/1229755



 身份证号分词示例


在本例中我们要实现通过输入员工的身份证号匹配员工信息。输入时除了支持整体匹配以外同时还要支持使用部分内容的模糊匹配如:出生日期/身份证号后八位/后六位/后四位等关键信息。索引包含以下四个字段:

 

l ID 文本类型,身份证号,需要分词器实现模糊匹配。

l emplyee_name 文本类型,员工姓名。

l dept 文本类型,所在部门。

l mobile 文本类型,联系方式。

 

模糊匹配要想实现身份证号信息提取,首先需要了解一下身份证号的信息规则:二代身份证号长度为18位,其中前六位中每两位分别表示签发的省市区的行政规划代码,7-14位表示出生年月日,15-16位表示派出所代码,17位标识性别,奇数为男性,偶数为女性,而最后一位是用于校验信息的校验码由0-9或X组成。按本例中的要求创建的自定义分词器需要满足一个身份证号处理后能提取到整体(1-18位),出生年月(7-14位),后八位(11-18位),后六位(14-18位),后四位(15-18位)五种场景。直接使用 Tokenizer 按照位置切分目前在 Elasticsearch 中没有满足需求的组件,所以就需要考虑一下身份证号在切分前进行变形。我们可以在

Char_Filter 阶段使用 pattern_replace 将身份证号按照规则将内容提取后使用空格追加到原有身份证号的后面,如 “110102199007050722” 处理后会变成 “110102199007050722 19900705 07050722 050722 0722”,然后再使用空格切分即可。分词器 ID_analyzer 结构如下:


 l Char Filter

Pattern Replace Filter,匹配到的内容进行替换

 

l Tokenizer

whitespace Tokenizer

 

l Token Filter

Lowercase Token Filter,单词转换为小写字母统一格式


定义正则表达式 (\d{6})(\d{4})(\d{2})(\d{2})([\dxX]{4}) 把字符串按照位置进行了一个分组,这样就可以在 replacement 中按照分组标签来进行字符串拼接。和上一例一样,在搜索时需要将输入的内容当作整体来匹配不进行提取替换操作,其它设置和写入分词器保持一致,分词器 ID_

search 结构如下:

 

l Tokenizer

whitespace Tokenizer

 

l Token Filter

Lowercase Token Filter,单词转换为小写字母统一格式

 

PUT employee_info
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ID_analyzer": {
          "type": "custom",
          "char_filter": [
            "ID_char_filter
          ],
          "tokenizer": "whitespace",
          "filter": [
            "lowercase"
          ]
        },
        "ID_search": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase"
          ]
        }
      },
      "char_filter": {
        "ID_char_filter": {
          "type": "pattern_replace",
          "pattern": """(\d{6})(\d{4})(\d{2})(\d{2})([\dxX]{4})""",
          "replacement": "$0 $2$3$4 $3$4$5 $4$5 $5"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "ID": {
        "type": "text",
        "analyzer": "ID_analyzer",
        "search_analyzer": "ID_search"
      },
      "employee_name":{
        "type": "text"
      },
      "dept": {
        "type": "keyword"
      },
      "mobile":{
        "type": "keyword"
      }
    }
  }
}
POST _bulk
{"index":{"_index":"employee_info","_id": "1"}}
{"employee_name":"符杰","ID":"110102199007050722","dept":"IT","mobile":"13853411491"}
{"index":{"_index":"employee_info","_id": "2"}}
{"employee_name":"熊志胜","ID":"130102198610211600","dept":"BU","mobile":"13758526665"}
{"index":{"_index":"employee_info","_id": "3"}}
{"employee_name":"安晨龙","ID":"143105199605078636","dept":"IT","mobile":"16602029900"}
{"index":{"_index":"employee_info","_id": "4"}}
{"employee_name":"尚静","ID":"110105198807206667","dept":"HR","mobile":"15170488414"}
{"index":{"_index":"employee_info","_id": "5"}}
{"employee_name":"邹松彬","ID":"22010219830713347X","dept":"LAW","mobile":"18741918417"}

查询测试数据生日为 19900705 或后四位是 347x 的员工信息,都能返回查询结果。


GET employee_info/_search
{
  "query": {
    "match": {
      "ID":  "19900705 347x"
    }
  }



相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
466 153
|
存储 前端开发
在React框架中,如何使用对象来管理组件的状态
在React中,组件状态通过`state`对象管理,利用`setState`方法更新状态。状态变化触发组件重新渲染,实现UI动态更新。对象结构清晰,便于复杂状态管理。
|
8月前
|
存储 弹性计算 数据管理
阿里云OSS对象存储收费标准价格表:流量包+存储包2025最新整理
阿里云OSS对象存储2025收费标准及请求费用等,提供按量付费与包年包月两种模式。标准型本地冗余存储按量价为0.09元/GB/月,包年包月如500GB仅118.99元/年。流量费仅收公网出方向,闲时0.25元/GB、忙时0.5元/GB。更多详情见官网。
3591 2
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
在当今互联网技术的迅猛发展中,前后端分离架构已然成为主流趋势,它不仅提升了开发效率,也优化了用户体验。然而,在这种架构模式下,如何实现高效的实时通信,特别是利用WebSocket协议,成为了提升用户体验的关键。本文将探讨在前后端分离架构中,使用Python进行WebSocket实时通信时的性能考量,以及与传统轮询方式的比较。
284 2
|
Swift iOS开发
Swift-UITableView的用法
这是一个简要的UITableView用法概述。UITableView是一个非常灵活和强大的界面组件,可以用于展示各种类型的数据,从简单的列表到复杂的数据集。详细的用法可以参考苹果官方文档以及在线教程和示例代码。
243 3
|
运维 Linux Shell
Ansible的介绍与安装
**自动化与Linux系统管理**\n\n学习自动化运维能减少手动任务的错误和遗漏,提高效率。Ansible是一款Python开发的自动化工具,支持多平台,实现批量配置、部署和命令执行。它是无代理的,通过SSH连接管理主机,无需在远程主机安装额外软件。\n\nAnsible具有跨平台、人类可读的自动化语言、描述应用状态、易版本控制、动态清单管理和与其他系统集成等优点。\n\nAnsible的工作流程包括ad-hoc和playbook模式。安装涉及配置YUM源、EPEL源,然后通过yum或dnf安装软件包。在无网络环境下,可以下载rpm包离线安装。
|
运维 安全 Cloud Native
阿里云云安全中心详细介绍_云安全中心介绍功能价格
阿里云云安全中心详细介绍_云安全中心介绍功能价格,云安全中心基础版免费、防病毒班432元一年、高级版优惠价969元一年,还有企业版和旗舰版可选,阿里云百科分享阿里云安全中心详细介绍,包括云安全中心功能、不同版本价格表以及有必要购买说明
230 0
|
数据可视化
R语言ggplot2 对Facebook用户数据可视化分析
R语言ggplot2 对Facebook用户数据可视化分析
|
SQL Oracle 关系型数据库
oracle基本笔记整理
oracle基本笔记整理
|
机器学习/深度学习 计算机视觉
【计算机视觉 | 目标检测】RegionCLIP: Region-based language-image pretraining
RegionCLIP的目的便是实现从image-text pairs的匹配到region-text pairs的匹配。构建一个模型进行图像区域的推理研究(如目标检测),目的是学习一个包含丰富的对象概念的区域视觉-语义空间,以便它可以用于开放词汇的目标检测。实质上就是训练一个视觉编码器V,使它可以编码图像区域,并将它们与语言编码器L编码的区域描述相匹配。
1001 0

热门文章

最新文章