Maison  >  Article  >  base de données  >  Comment puis-je obtenir une correspondance floue efficace pour les adresses e-mail et les numéros de téléphone dans Elasticsearch ?

Comment puis-je obtenir une correspondance floue efficace pour les adresses e-mail et les numéros de téléphone dans Elasticsearch ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 09:19:01743parcourir

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

Correspondance floue d'e-mails ou de téléphones d'Elasticsearch

Question :

Comment la correspondance floue peut-elle être mise en œuvre des adresses e-mail ou des numéros de téléphone à l'aide d'Elasticsearch ? Plus précisément, comment faire correspondre tous les e-mails se terminant par « @gmail.com » ou tous les numéros de téléphone commençant par « 136 » ?

Réponse :

Utiliser des analyseurs personnalisés pour l'indexation et la recherche peuvent faciliter la correspondance floue pour les données de courrier électronique et téléphoniques.

Email Fuzzy Correspondance :

Configurez un analyseur avec les paramètres suivants :

  • Analyseur d'index : index_email_analyzer

    • Tokenizer standard
    • Filtres minuscules et nom-ngram
    • Max gramme : 20
  • Analyseur de recherche : search_email_analyzer

    • Tokenizer standard
    • Filtre minuscule

Numéro de téléphone flou Correspondance :

Configurez un analyseur avec les paramètres suivants :

  • Analyseur d'index : index_phone_analyzer

    • Filtre à chiffres uniquement
    • Tokenizer Edge-ngram (3-15 grammes)
    • Min gramme : 1
    • Max gramme : 15
  • Analyseur de recherche : search_phone_analyzer

    • Filtre à chiffres uniquement
    • Mot clé tokenizer

Exemple d'index :

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"
        }
      }
    }
  }
}

Requêtes de recherche :

  • Faire correspondre tous les e-mails se terminant par "@gmail.com":
POST myindex
{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}
  • Faire correspondre tous les numéros de téléphone commençant par "136":
POST myindex
{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}

En utilisant ces analyseurs personnalisés, Elasticsearch peut effectuer efficacement une correspondance floue pour les adresses e-mail et les numéros de téléphone.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn