Elasticsearch 模糊电子邮件或电话匹配
问题:
如何实现模糊匹配使用 Elasticsearch 获取电子邮件地址或电话号码?具体来说,如何匹配以“@gmail.com”结尾的所有电子邮件或以“136”开头的所有电话号码?
答案:
利用自定义分析器索引和搜索可以促进电子邮件和电话数据的模糊匹配。
电子邮件模糊匹配:
使用以下设置配置分析器:
索引分析器:index_email_analyzer
搜索分析器:search_email_analyzer
电话号码模糊匹配:
使用以下设置配置分析器:
索引分析器: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" } } } } }
搜索查询:
POST myindex { "query": { "term": { "email": "@gmail.com" } } }
POST myindex { "query": { "term": { "phone": "136" } } }
通过利用这些自定义分析器,Elasticsearch 可以有效地对电子邮件地址和电话号码进行模糊匹配。
以上是如何在 Elasticsearch 中实现电子邮件地址和电话号码的高效模糊匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!