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!