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

Barbara Streisand
發布: 2024-10-28 16:25:30
原創
666 人瀏覽過

How can I implement fuzzy matching for email addresses and telephone numbers in Elasticsearch?

Elasticsearch 中的電子郵件和電話模糊匹配

Elasticsearch 提供了實現模糊匹配的強大功能,可讓您搜尋與給定部分匹配的電子郵件地址或電話號碼價值。以下是如何有效實現這一目標:

1.使用自訂分析器

要優化效能,請為電子郵件地址(index_email_analyzer、search_email_analyzer)和電話號碼(index_phone_analyzer、search_phone_analyzer)建立自訂分析器。這些分析器使用特定的標記器和篩選器將輸入值分解為相關標記。

2.使用索引分析器對資料建立索引

對資料建立索引時,利用自訂索引分析器來處理電子郵件和電話值。這確保了資料以適合模糊匹配的標記化形式儲存。

3.使用搜尋分析器進行搜尋

在搜尋操作期間,使用自訂搜尋分析器對輸入搜尋參數進行標記。這允許 Elasticsearch 將標記化搜尋參數與標記化資料進行比較,甚至識別部分匹配。

4.索引定義範例

以下是索引定義範例,其中包含用於模糊配對電子郵件和電話號碼的必要分析器:

<code class="json">{
  "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"
        }
      }
    }
  }
}</code>
登入後複製

5.範例查詢

要執行模糊匹配,請使用術語查詢:

<code class="json">{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}</code>
登入後複製
<code class="json">{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}</code>
登入後複製

此解決方案為電子郵件地址和電話號碼提供高效、準確的模糊匹配,為您提供協助根據部分或不完整的輸入輕鬆檢索資料。

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

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