使用Elasticsearch做手机号和身份证号的模糊检索

背景

客户想通过人名 四位数值 来检索人的信息 例如 张三 3421,例如需要检索包含张三和且手机号或者身份证里包含3421的数据

过程

es集群使用的是ik_max_word分词器,该分词器不会对手机号和身份证号进行分词,是无法做到手机号或者身份证的模糊检索的,如果要做的话,需要使用正则(效率极低)

后来有同事提出对手机号和身份证号进行拆分达到分词的效果 例如 13088886666,在存储的时候拆分为130 8888 6666,es在存储的时候 会将这个字符串拆分为三串,所以可以达到检索的要求,但是如果想搜8866,那么实际上是检索不到数据的。

轻舟已过万重山



使用自定义分词器ngram,上图就是使用ngram分词器之后的效果,ngram会进行滑步分词,且遵循排列组合

完整的mapping如下
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1,
"index":{
"sort.field":"business_time",
"sort.order":"desc",
"max_ngram_diff": 14
},
"analysis":{
"analyzer":{
"phoneNo_analyzer":{
"tokenizer": "phoneNo_analyzer"
},
"cardNo_analyzer":{
"tokenizer": "cardNo_analyzer"
}
},
"tokenizer":{
"phoneNo_analyzer":{
"type": "ngram",
"min_gram": 4,
"max_gram": 11,
"token_chars": [
"letter","digit"
]
},
"cardNo_analyzer":{
"type": "ngram",
"min_gram": 4,
"max_gram": 18,
"token_chars": [
"letter","digit"
]
}
}
}
},
"mappings":{
"dynamic":"strict",
"properties":{
"content":{
"type":"text",
"analyzer":"ik_max_word"
},
"business_time":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis||yyyy-MM-dd HH:mm:ss.S||yyyy-MM-dd HH:mm:ss.SS||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss.SSSS||yyyy-MM-dd HH:mm:ss.SSSSS||yyyy-MM-dd HH:mm:ss.SSSSSS"
},
"cardNo": {
"type":"text",
"analyzer": "cardNo_analyzer"
},
"phoneNo":{
"type":"text",
"analyzer": "phoneNo_analyzer"
}
}
}
}

结果

使用Elasticsearch做手机号和身份证号的模糊检索的更多相关文章

  1. js 随机生成姓名、手机号、身份证号、银行卡号

    开发测试的时候,经常需要填写姓名.手机号.身份证号.银行卡号,既要符合格式要求.又不能重复.大家会到网上搜各种生成器.能不能自己写一个简单的生成器呢.下面是随机生成姓名.手机号.身份证号.银行卡号的j ...

  2. jquery正则表达式验证(手机号、身份证号、中文名称)

    这篇文章主要介绍了jquery正则表达式验证,实现手机号.身份证号.中文名称验证,感兴趣的小伙伴们可以参考一下 本文实例需要验证的内容:中文姓名.手机号.身份证和地址,验证方法分享给大家供大家参考,具 ...

  3. Laravel 中自定义 手机号和身份证号验证

    首先在 Providers\AppServiceProvider.php 文件中自定义 手机号和身份证号验证 // AppServiceProvider.php 文件 <?php namespa ...

  4. [前端] jquery验证手机号、身份证号、中文名称

    验证: 中文姓名.手机号.身份证和地址 HTML(表单): <form action=""> <div class="form-group"& ...

  5. 使用mysql将手机号、身份证号等字段进行脱敏

    -- 脱敏姓名 UPDATE wb_person_message SET `name`=(if(LENGTH(name)>6,CONCAT(LEFT(name,1), '**' ),CONCAT ...

  6. Delphi:校验手机号及身份证号

    //校验手机号  function IsMobileNumber( num:string ):boolean;   begin     Result:=False;     if length( tr ...

  7. C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编

      验证电话号码的主要代码如下: public bool IsTelephone(string str_telephone) { return System.Text.RegularExpressio ...

  8. 1.2.2 Excel中手机号或身份证号批量加密星号

    在对应的单元格中我们输入公式: =LEFT(C4,3)&"****"&RIGHT(C4,4)或=MID(C4,1,3)&"****"&a ...

  9. [转载]C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编

    原文出处:https://www.cnblogs.com/wuhuisheng/archive/2011/03/23/1992652.html 验证电话号码的主要代码如下: public bool I ...

  10. C# 中使用正则表达式验证电话号码、手机号、身份证号

    验证电话号码的主要代码如下: public bool IsTelephone(stringstr_telephone) { returnSystem.Text.RegularExpressions.R ...

随机推荐

  1. TimeLine 时间轴 网站 分享 time.graphics - nodejs 10年图

    话说20年 弹指一挥间 https://time.graphics/line/682014 nodejs 10年图 https://time.graphics/line/598790 资料 2022, ...

  2. electron 下网页获取 micphone 权限

    网页获取麦克风或摄像头权限我们只需调用 navigator.mediaDevices.getUserMedia 方法就可唤起浏览器用户授权 const useMicphone = async () = ...

  3. 用于演示文稿的新 Dapr 幻灯片

    Dapr 官方博客上(https://blog.dapr.io/posts/2024/03/10/new-dapr-slide-deck-for-your-presentations/)发布了一个新的 ...

  4. 让艺术触手可及!3DCAT实时云渲染赋能真浪数字艺术馆首展

    2023年5月18日,由真浪数字艺术和EZVR联合打造的真浪数字艺术馆首展–「破界·交织」让艺术更自由,正式与大家相见.此次展览分为五个主题展馆,汇聚了来自全球各领域的19位青年数字艺术家一同探讨虚实 ...

  5. 03.Android崩溃Crash库之ExceptionHandler分析

    目录总结 00.异常处理几个常用api 01.UncaughtExceptionHandler 02.Java线程处理异常分析 03.Android中线程处理异常分析 04.为何使用setDefaul ...

  6. AsyncTask异步任务类

    目录介绍 01.先看下AsyncTask用法 02.AsyncTask源码深入分析 2.1 构造方法源码分析 2.2 看execute(Params... params)方法 2.3 mWorker和 ...

  7. echarts中实现多个label

    先来个效果图 如果你刚好需要实现这种效果,那么可以瞅一瞅了 我要开始水文了 如图所示,图中顶部部分文字乍一看好像是独立于柱状图,显示在最顶上,其实它也是由柱状图模拟而成. 只是吧图形相关属性做了隐藏, ...

  8. js判断对象数组等是否为空

    //是否为空 /** * null undefined NaN false " " {} [] 为空 * 为空 true 不为空 false * @param {*} value ...

  9. 深入在线文档系统的 MarkDown/Word/PDF 导出能力设计

    深入在线文档系统的 MarkDown/Word/PDF 导出能力设计 当我们实现在线文档的系统时,通常需要考虑到文档的导出能力,特别是对于私有化部署的复杂ToB产品来说,文档的私有化版本交付能力就显得 ...

  10. KingbaseES 数据库CPU使用率过高问题与解决

    前言 本文介绍生产环境中CPU使用率高的常见原因,以及在CPU使用率高问题上的可能解决措施. 本文主要内容: 关于用于识别高CPU使用率的工具,例如kwr报告中DB CPU指标.kmonitor和sy ...