Heim  >  Artikel  >  Datenbank  >  Wie kann der Fuzzy-Abgleich von E-Mails und Telefonnummern in Elasticsearch optimiert werden?

Wie kann der Fuzzy-Abgleich von E-Mails und Telefonnummern in Elasticsearch optimiert werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-30 15:51:02422Durchsuche

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

Fuzzy-Matching von E-Mails und Telefonnummern in Elasticsearch

Elasticsearch bietet flexible Methoden für den Fuzzy-Matching von Daten, einschließlich E-Mails und Telefonnummern. In diesem Artikel wird untersucht, wie Sie die Leistung für solche Abfragen mithilfe benutzerdefinierter Analysatoren und Tokenfilter optimieren können.

Benutzerdefinierte Analysatoren für Fuzzy-Matching

Für einen effizienten Fuzzy-Abgleich von E-Mails und Telefonnummern ist es wichtig Es wird empfohlen, benutzerdefinierte Analysatoren in Elasticsearch zu erstellen. Diese Analysatoren bestehen aus einem Tokenizer, der Eingabedaten für die Analyse vorbereitet, und einer Reihe von Filtern, die bestimmte Transformationen ausführen.

E-Mail-Analysator

Der index_email_analyzer-Analysator nutzt den Standard-Tokenizer, um Zerlegen Sie die Eingabe. Anschließend werden Filter wie „Kleinbuchstaben“, „name_ngram_filter“ und „trimmen“ angewendet, um die E-Mail in Kleinbuchstaben umzuwandeln, Ngrams unterschiedlicher Länge (von 3 bis 20 Zeichen) zu generieren und Leerzeichen zu entfernen.

Der search_email_analyzer verwendet in ähnlicher Weise den Standard-Tokenizer, jedoch Verwendet nur Kleinbuchstaben- und Trim-Filter. Dadurch wird die Eingabe für die Suche vorbereitet, bei der der Ngram-Filter nicht erforderlich ist.

Telefonanalysator

Für Telefonnummern verwendet der index_phone_analyzer den digit_edge_ngram_tokenizer, um Ngramme unterschiedlicher Länge zu generieren (1 bis 15 Zeichen), die mit einer Ziffer beginnen. Dies ermöglicht die Zuordnung jedes beliebigen Präfixes einer Telefonnummer. Der Zeichenfilter „digit_only“ entfernt nicht-stellige Zeichen, um sicherzustellen, dass nur numerische Werte analysiert werden.

Der search_phone_analyzer verwendet den Schlüsselwort-Tokenizer, der aus der Eingabe ein einzelnes Token generiert und so eine genaue Zuordnung von Telefonnummern ermöglicht.

Implementieren der Analysatoren

Hier ist eine Beispielzuordnung, die diese benutzerdefinierten Analysatoren integriert:

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

Durchführen von Fuzzy-Abfragen

Um E-Mails, die mit „@gmail.com“ enden, oder Telefonnummern, die mit „136“ beginnen, abzugleichen, können Sie Abfragen stellen wie:

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

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

Diese Abfragen nutzen die benutzerdefinierten Analysatoren, um die erforderlichen Ngrams für Fuzzy zu generieren passend.

Das obige ist der detaillierte Inhalt vonWie kann der Fuzzy-Abgleich von E-Mails und Telefonnummern in Elasticsearch optimiert werden?. 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