Maison  >  Article  >  base de données  >  Comment optimiser la correspondance floue des e-mails et des numéros de téléphone dans Elasticsearch ?

Comment optimiser la correspondance floue des e-mails et des numéros de téléphone dans Elasticsearch ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 15:51:02422parcourir

How to Optimize Fuzzy Matching of Emails and Phone Numbers in Elasticsearch?

Correspondance floue des e-mails et des numéros de téléphone dans Elasticsearch

Elasticsearch propose des méthodes flexibles pour la correspondance floue des données, y compris les e-mails et les numéros de téléphone. Cet article explique comment optimiser les performances de ces requêtes à l'aide d'analyseurs personnalisés et de filtres de jetons.

Analyseurs personnalisés pour la correspondance floue

Pour une correspondance floue efficace des e-mails et des numéros de téléphone, il est Il est recommandé de créer des analyseurs personnalisés dans Elasticsearch. Ces analyseurs se composent d'un tokenizer qui prépare les données d'entrée pour l'analyse et d'un ensemble de filtres qui exécutent des transformations spécifiques.

Email Analyzer

L'analyseur index_email_analyzer exploite le tokenizer standard pour décomposer l'entrée. Il applique ensuite des filtres tels que minuscules, name_ngram_filter et trim pour convertir l'e-mail en minuscules, générer des ngrammes de différentes longueurs (de 3 à 20 caractères) et supprimer les espaces.

Le search_email_analyzer utilise de la même manière le tokenizer standard mais utilise uniquement des filtres minuscules et de garniture. Ceci prépare l'entrée pour la recherche, où le filtre ngram n'est pas requis.

Analyseur de téléphone

Pour les numéros de téléphone, l'index_phone_analyzer utilise le digit_edge_ngram_tokenizer pour générer des ngrammes de différentes longueurs. (1 à 15 caractères) commençant par un chiffre. Cela permet de faire correspondre n’importe quel préfixe d’un numéro de téléphone. Le filtre de caractères digit_only supprime les caractères non numériques pour garantir que seules les valeurs numériques sont analysées.

Le search_phone_analyzer utilise le mot-clé tokenizer, qui génère un seul jeton à partir de l'entrée, permettant une correspondance exacte des numéros de téléphone.

Implémentation des analyseurs

Voici un exemple de mappage qui intègre ces analyseurs personnalisés :

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

Exécution de requêtes floues

Pour faire correspondre les e-mails se terminant par "@gmail.com" ou les numéros de téléphone commençant par "136", vous pouvez émettre des requêtes telles que :

POST myindex
{
  "query": {
    "term": {
      "email": "@gmail.com"
    }
  }
}

POST myindex
{
  "query": {
    "term": {
      "phone": "136"
    }
  }
}

Ces requêtes exploiteront les analyseurs personnalisés pour générer les ngrammes nécessaires pour le flou correspondant.

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