如何在 Elasticsearch 中實現電子郵件地址和電話號碼的高效模糊匹配?

Susan Sarandon
發布: 2024-10-31 09:19:01
原創
747 人瀏覽過

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

Elasticsearch 模糊電子郵件或電話匹配

問題:

問題:

問題:

如何實現模糊使用Elasticsearch 取得電子郵件地址或電話號碼?具體來說,如何匹配以“@gmail.com”結尾的所有電子郵件或以“136”開頭的所有電話號碼?

答案:

    利用自訂分析器索引和搜尋可以促進電子郵件和電話資料的模糊匹配。
  • 電子郵件模糊匹配:
    • 使用以下設定配置分析器:
    • 索引分析器:index_email_analyzer
  • 索引分析器:index_email_analyzer
  • 標準分詞器
    • 小寫與name-ngram 過濾器
    • 最大克數:20

搜尋分析器:search_email_analyzer

標準分詞器

    小寫過濾器
    • 電話號碼模糊:>
    • 使用以下設定組態分析器:
    • 索引分析器:index_phone_analyzer
  • 僅數位過濾器

    Edge -ngram 分詞器(3-15 克)
    • 最小克:1
    • 最大克:15

搜尋分析器:search_phphone_analyzer_phphone

僅數字過濾器
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" }
    }
}
登入後複製

符合所有以「@gmail.com」結尾的電子郵件: 符合所有以「136」開頭的電話號碼:透過利用這些自訂分析器,Elasticsearch 可以有效地對電子郵件地址和電話號碼進行模糊配對。

以上是如何在 Elasticsearch 中實現電子郵件地址和電話號碼的高效模糊匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!