Maison >base de données >tutoriel mysql >Comment puis-je mettre en œuvre une correspondance floue pour les adresses e-mail et les numéros de téléphone 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>
5. Exemples de requêtes
Pour effectuer des correspondances floues, utilisez le terme requête :
<code class="json">{ "query": { "term": { "phone": "136" } } }</code>
<code class="json">{ "query": { "term": { "email": "@gmail.com" } } }</code>
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!