如何在 Elasticsearch 中实现电子邮件地址和电话号码的高效模糊匹配?

Susan Sarandon
发布: 2024-10-31 09:19:01
原创
811 人浏览过

How can I achieve efficient fuzzy matching for email addresses and phone numbers within Elasticsearch?

Elasticsearch 模糊电子邮件或电话匹配

问题:

如何实现模糊匹配使用 Elasticsearch 获取电子邮件地址或电话号码?具体来说,如何匹配以“@gmail.com”结尾的所有电子邮件或以“136”开头的所有电话号码?

答案:

利用自定义分析器索引和搜索可以促进电子邮件和电话数据的模糊匹配。

电子邮件模糊匹配:

使用以下设置配置分析器:

  • 索引分析器:index_email_analyzer

    • 标准分词器
    • 小写和 name-ngram 过滤器
    • 最大克数:20
  • 搜索分析器:search_email_analyzer

    • 标准分词器
    • 小写过滤器

电话号码模糊匹配:

使用以下设置配置分析器:

  • 索引分析器:index_phone_analyzer

    • 仅数字过滤器
    • Edge-ngram 分词器(3-15 克)
    • 最小克:1
    • 最大克:15
  • 搜索分析器: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"
        }
      }
    }
  }
}
登录后复制

搜索查询:

  • 匹配所有以“@gmail.com”结尾的电子邮件:
POST myindex
{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}
登录后复制
  • 匹配所有以“136”开头的电话号码:
POST myindex
{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}
登录后复制

通过利用这些自定义分析器,Elasticsearch 可以有效地对电子邮件地址和电话号码进行模糊匹配。

以上是如何在 Elasticsearch 中实现电子邮件地址和电话号码的高效模糊匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板