Elasticsearch 내에서 이메일 주소와 전화번호에 대한 효율적인 유사 일치를 어떻게 달성할 수 있나요?

Susan Sarandon
풀어 주다: 2024-10-31 09:19:01
원래의
748명이 탐색했습니다.

How can I achieve efficient fuzzy matching for email addresses and phone numbers within Elasticsearch?

Elasticsearch 퍼지 이메일 또는 전화 일치

질문:

퍼지 일치를 어떻게 구현할 수 있나요? Elasticsearch를 사용하여 이메일 주소나 전화번호를 찾으시나요? 구체적으로, "@gmail.com"으로 끝나는 모든 이메일 또는 "136"으로 시작하는 모든 전화번호를 어떻게 일치시킬 수 있습니까?

답변:

맞춤 분석기를 활용하여 인덱싱 및 검색을 통해 이메일 및 전화 데이터에 대한 유사 항목 일치를 용이하게 할 수 있습니다.

이메일 유사 항목 일치:

다음 설정으로 분석기를 구성하세요.

  • 인덱스 분석기: index_email_analyzer

    • 표준 토크나이저
    • 소문자 및 이름-ngram 필터
    • 최대 그램: 20
  • 검색 분석기: search_email_analyzer

    • 표준 토크나이저
    • 소문자 필터

전화번호 퍼지 일치:

다음 설정으로 분석기를 구성합니다:

  • 인덱스 분석기: index_phone_analyzer

    • 숫자 전용 필터
    • Edge-ngram 토크나이저(3~15그램)
    • 최소 그램: 1
    • 최대 그램: 15
  • 검색 분석기: 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"
        }
      }
    }
  }
}
로그인 후 복사

검색어:

  • "@gmail.com"으로 끝나는 모든 이메일 일치:
POST myindex
{ 
    "query": {
        "term": 
            { "email": "@gmail.com" }
    }
}
로그인 후 복사
  • "136"으로 시작하는 모든 전화번호 일치:
POST myindex
{ 
    "query": {
        "term": 
            { "phone": "136" }
    }
}
로그인 후 복사

Elasticsearch는 이러한 사용자 정의 분석기를 활용하여 이메일 주소와 전화번호에 대한 유사 항목 일치를 효율적으로 수행할 수 있습니다.

위 내용은 Elasticsearch 내에서 이메일 주소와 전화번호에 대한 효율적인 유사 일치를 어떻게 달성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!