Heim  >  Artikel  >  Datenbank  >  Wie kann ich Fuzzy-Matching für E-Mail-Adressen und Telefonnummern in Elasticsearch implementieren?

Wie kann ich Fuzzy-Matching für E-Mail-Adressen und Telefonnummern in Elasticsearch implementieren?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 16:25:30667Durchsuche

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

Fuzzy-Matching für E-Mail und Telefon in Elasticsearch

Elasticsearch bietet robuste Funktionen für die Implementierung von Fuzzy-Matching, sodass Sie nach E-Mail-Adressen oder Telefonnummern suchen können, die teilweise mit einer bestimmten Adresse übereinstimmen Wert. So erreichen Sie dieses Ziel effizient:

1. Setzen Sie benutzerdefinierte Analysetools ein

Um die Leistung zu optimieren, erstellen Sie benutzerdefinierte Analysetools für E-Mail-Adressen (index_email_analyzer, search_email_analyzer) und Telefonnummern (index_phone_analyzer, search_phone_analyzer). Diese Analysatoren verwenden spezielle Tokenizer und Filter, um Eingabewerte in relevante Token zu zerlegen.

2. Daten mit Indexanalysatoren indizieren

Verwenden Sie beim Indizieren von Daten die benutzerdefinierten Indexanalysatoren, um E-Mail- und Telefonwerte zu verarbeiten. Dadurch wird sichergestellt, dass die Daten in einer tokenisierten Form gespeichert werden, die für Fuzzy-Matching geeignet ist.

3. Suche mit Suchanalysatoren

Verwenden Sie während Suchvorgängen die benutzerdefinierten Suchanalysatoren, um eingegebene Suchparameter zu tokenisieren. Dadurch kann Elasticsearch die tokenisierten Suchparameter mit den tokenisierten Daten vergleichen und sogar Teilübereinstimmungen identifizieren.

4. Beispiel einer Indexdefinition

Hier ist ein Beispiel einer Indexdefinition mit den notwendigen Analysatoren für den Fuzzy-Abgleich von E-Mail- und Telefonnummern:

<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. Beispielabfragen

Um Fuzzy-Matches durchzuführen, verwenden Sie den Begriff Abfrage:

<code class="json">{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}</code>
<code class="json">{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}</code>

Diese Lösung bietet einen effizienten und genauen Fuzzy-Matching für E-Mail-Adressen und Telefonnummern und gibt Ihnen so mehr Möglichkeiten um Daten basierend auf teilweiser oder unvollständiger Eingabe einfach abzurufen.

Das obige ist der detaillierte Inhalt vonWie kann ich Fuzzy-Matching für E-Mail-Adressen und Telefonnummern in Elasticsearch implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn