栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过Elasticsearch模糊匹配电子邮件或电话?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过Elasticsearch模糊匹配电子邮件或电话?

一种简单的方法是创建一个自定义分析器,该分析器使用电子邮件的n-gram令牌过滤器(=>参见下文

index_email_analyzer
search_email_analyzer
+
email_url_analyzer
进行精确的电子邮件匹配)和电话的edge-
ngram令牌过滤器
(=>参见下文
index_phone_analyzer
search_phone_analyzer
)。

完整的索引定义在下面提供。

PUT myindex{  "settings": {    "analysis": {      "analyzer": {        "email_url_analyzer": {          "type": "custom",          "tokenizer": "uax_url_email",          "filter": [ "trim" ]        },        "index_phone_analyzer": {          "type": "custom",          "char_filter": [ "digit_only" ],          "tokenizer": "digit_edge_ngram_tokenizer",          "filter": [ "trim" ]        },        "search_phone_analyzer": {          "type": "custom",          "char_filter": [ "digit_only" ],          "tokenizer": "keyword",          "filter": [ "trim" ]        },        "index_email_analyzer": {          "type": "custom",          "tokenizer": "standard",          "filter": [ "lowercase", "name_ngram_filter", "trim" ]        },        "search_email_analyzer": {          "type": "custom",          "tokenizer": "standard",          "filter": [ "lowercase", "trim" ]        }      },      "char_filter": {        "digit_only": {          "type": "pattern_replace",          "pattern": "\D+",          "replacement": ""        }      },      "tokenizer": {        "digit_edge_ngram_tokenizer": {          "type": "edgeNGram",          "min_gram": "1",          "max_gram": "15",          "token_chars": [ "digit" ]        }      },      "filter": {        "name_ngram_filter": {          "type": "ngram",          "min_gram": "1",          "max_gram": "20"        }      }    }  },  "mappings": {    "your_type": {      "properties": {        "email": {          "type": "string",          "analyzer": "index_email_analyzer",          "search_analyzer": "search_email_analyzer"        },        "phone": {          "type": "string",          "analyzer": "index_phone_analyzer",          "search_analyzer": "search_phone_analyzer"        }      }    }  }}

现在,让我们一点一点地剖析它。

对于该

phone
字段,其想法是使用来索引电话值
index_phone_analyzer
,该索引使用edge-
ngram标记器来索引电话号码的所有前缀。所以,如果您的电话号码
1362435647
,下面的标记会产生:
1
13
136
1362
13624
136243
1362435
13624356
13624356
136243564
1362435647

然后,在搜索时,我们使用另一个分析器

search_phone_analyzer
,该分析器将简单地获取输入数字(例如
136
),并
phone
使用简单
match
term
查询将其与字段进行匹配:

POST myindex{     "query": {        "term":  { "phone": "136" }    }}

对于该

email
字段,我们以类似的方式进行操作,因为我们使用来对电子邮件值进行索引,该索引
index_email_analyzer
使用了ngram令牌过滤器,该过滤器将生成所有可能的长度不同(在1到20个字符之间)的令牌,这些令牌可以从电子邮件值。例如:
john@gmail.com
将被标记化到
j
jo
joh
,…
gmail.com
,…
john@gmail.com

然后在搜索时,我们将使用另一个名为的分析器

search_email_analyzer
,它将接受输入并尝试将其与索引标记进行匹配。

POST myindex{     "query": {        "term":  { "email": "@gmail.com" }    }}

email_url_analyzer
分析仪并没有在本例中使用,但我已经为了以防万一,你需要确切的电子邮件值匹配包括它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号