ホームページ  >  記事  >  データベース  >  Elasticsearch 内で電子メール アドレスと電話番号の効率的なあいまい一致を実現するにはどうすればよいですか?

Elasticsearch 内で電子メール アドレスと電話番号の効率的なあいまい一致を実現するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 09:19:01743ブラウズ

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

Elasticsearch のファジーメールまたは電話マッチング

質問:

ファジーマッチングはどのように実装できますかElasticsearch を使用して電子メール アドレスまたは電話番号を取得しますか?具体的には、「@gmail.com」で終わるすべてのメール、または「136」で始まるすべての電話番号を照合するにはどうすればよいですか?

答え:

カスタム アナライザーを使用して、インデックス作成と検索により、電子メールと電話データのあいまい一致が容易になります。

電子メールあいまい一致:

次の設定でアナライザーを構成します:

  • インデックス アナライザー:index_email_analyzer

    • 標準トークナイザー
    • 小文字および名前 ngram フィルター
    • 最大グラム: 20
  • 検索アナライザー: search_email_analyzer

    • 標準トークナイザー
    • 小文字フィルター

電話番号ファジー マッチング:

次の設定でアナライザーを構成します:

  • インデックス アナライザー:index_phone_analyzer

    • 数字のみフィルター
    • エッジ グラム トークナイザー (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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。