Elasticsearch のファジーメールまたは電話マッチング
質問:
ファジーマッチングはどのように実装できますかElasticsearch を使用して電子メール アドレスまたは電話番号を取得しますか?具体的には、「@gmail.com」で終わるすべてのメール、または「136」で始まるすべての電話番号を照合するにはどうすればよいですか?
答え:
カスタム アナライザーを使用して、インデックス作成と検索により、電子メールと電話データのあいまい一致が容易になります。
電子メールあいまい一致:
次の設定でアナライザーを構成します:
インデックス アナライザー:index_email_analyzer
検索アナライザー: search_email_analyzer
電話番号ファジー マッチング:
次の設定でアナライザーを構成します:
インデックス アナライザー:index_phone_analyzer
検索アナライザー: search_phone_analyzer
インデックスの例:
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" } } } } }
検索クエリ:
POST myindex { "query": { "term": { "email": "@gmail.com" } } }
POST myindex { "query": { "term": { "phone": "136" } } }
これらのカスタム アナライザーを利用することで、Elasticsearch は電子メール アドレスと電話番号のあいまい一致を効率的に実行できます。
以上がElasticsearch 内で電子メール アドレスと電話番号の効率的なあいまい一致を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。