Maison > base de données > tutoriel mysql > le corps du texte

Comment puis-je mettre en œuvre une correspondance floue pour les adresses e-mail et les numéros de téléphone dans Elasticsearch ?

Barbara Streisand
Libérer: 2024-10-28 16:25:30
original
666 Les gens l'ont consulté

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

Correspondance floue pour les e-mails et les téléphones dans Elasticsearch

Elasticsearch fournit des fonctionnalités robustes pour la mise en œuvre de la correspondance floue, vous permettant de rechercher des adresses e-mail ou des numéros de téléphone qui correspondent partiellement à un élément donné. valeur. Voici comment atteindre cet objectif efficacement :

1. Utiliser des analyseurs personnalisés

Pour optimiser les performances, créez des analyseurs personnalisés pour les adresses e-mail (index_email_analyzer, search_email_analyzer) et les numéros de téléphone (index_phone_analyzer, search_phone_analyzer). Ces analyseurs utilisent des tokeniseurs et des filtres spécifiques pour décomposer les valeurs d'entrée en jetons pertinents.

2. Indexer les données avec des analyseurs d'index

Lors de l'indexation des données, utilisez les analyseurs d'index personnalisés pour traiter les valeurs des e-mails et des téléphones. Cela garantit que les données sont stockées sous une forme tokenisée adaptée à la correspondance floue.

3. Recherchez avec des analyseurs de recherche

Pendant les opérations de recherche, utilisez les analyseurs de recherche personnalisés pour tokeniser les paramètres de recherche d'entrée. Cela permet à Elasticsearch de comparer les paramètres de recherche tokenisés aux données tokenisées, identifiant même des correspondances partielles.

4. Exemple de définition d'index

Voici un exemple de définition d'index avec les analyseurs nécessaires pour la correspondance floue des numéros de courrier électronique et de téléphone :

<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>
Copier après la connexion

5. Exemples de requêtes

Pour effectuer des correspondances floues, utilisez le terme requête :

<code class="json">{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}</code>
Copier après la connexion
<code class="json">{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}</code>
Copier après la connexion

Cette solution offre une correspondance floue efficace et précise pour les adresses e-mail et les numéros de téléphone, vous permettant pour récupérer facilement des données basées sur une saisie partielle ou incomplète.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!