Phone number analyzers
출처: 문서
본문
전화번호 분석기
analysis-phonenumber 플러그인은 전화번호를 파싱하기 위한 분석기와 토크나이저를 제공해요. 전화번호 파싱은 (처음에는 간단해 보일 수 있지만) 간단한 작업이 아니기 때문에 전용 분석기가 필요해요. 전화번호 파싱에 관한 일반적인 오해에 대해서는 프로그래머가 전화번호에 대해 믿는 오해들을 참조하세요.
OpenSearch는 다음 전화번호 분석기를 지원해요:
phone: 인덱싱 시 사용하는 인덱스 분석기.phone-search: 검색 시 사용하는 검색 분석기.
내부적으로 플러그인은 libphonenumber 라이브러리를 사용하며 그 파싱 규칙을 따라요.
전화번호 분석기는 더 큰 텍스트에서 전화번호를 찾기 위한 것이 아니에요. 대신 전화번호만 포함하는 필드에 사용해야 해요. {: .note}
플러그인 설치
전화번호 분석기를 사용하려면 먼저 다음 명령을 실행하여 analysis-phonenumber 플러그인을 설치해야 해요:
./bin/opensearch-plugin install analysis-phonenumber
기본 지역 지정
분석기 내에서 phone-region 매개변수를 제공하여 전화번호 파싱을 위한 기본 지역을 선택적으로 지정할 수 있어요. 유효한 전화 지역은 ISO 3166 국가 코드로 표시돼요. 자세한 내용은 ISO 3166 국가 코드 목록을 참조하세요.
국제 전화 접두사 +가 포함된 전화번호를 토큰화할 때는 기본 지역이 중요하지 않아요. 그러나 국제 번호에 국가 접두사를 사용하는 전화번호(예: 대부분의 유럽 국가에서 북미로 전화를 걸기 위해 +1 대신 001을 사용하는 경우)의 경우 지역을 제공해야 해요. 또한 지역을 지정하여 국제 접두사가 없는 로컬 전화번호도 올바르게 인덱싱할 수 있어요.
예제
다음 요청은 스위스(지역 코드 CH)의 전화번호를 수집하는 하나의 필드를 포함하는 인덱스를 생성해요:
PUT /example-phone
{
"settings": {
"analysis": {
"analyzer": {
"phone-ch": {
"type": "phone",
"phone-region": "CH"
},
"phone-search-ch": {
"type": "phone-search",
"phone-region": "CH"
}
}
}
},
"mappings": {
"properties": {
"phone_number": {
"type": "text",
"analyzer": "phone-ch",
"search_analyzer": "phone-search-ch"
}
}
}
}
{% include copy-curl.html %}
phone 분석기
phone 분석기는 주어진 전화번호를 기반으로 n-gram을 생성해요. 국제 전화 접두사가 포함된 (가상의) 스위스 전화번호는 스위스 특정 전화 지역을 지정하거나 지정하지 않고도 파싱할 수 있어요. 따라서 다음 두 요청은 동일한 결과를 생성해요:
GET /example-phone/_analyze
{
"analyzer" : "phone-ch",
"text" : "+41 60 555 12 34"
}
{% include copy-curl.html %}
GET /example-phone/_analyze
{
"analyzer" : "phone",
"text" : "+41 60 555 12 34"
}
{% include copy-curl.html %}
응답에는 생성된 n-gram이 포함돼요:
["+41 60 555 12 34", "6055512", "41605551", "416055512", "6055", "41605551234", ...]
그러나 국제 전화 접두사 + 없이 전화번호를 지정하는 경우(0041을 사용하거나 국제 전화 접두사를 완전히 생략하는 경우) 올바른 전화 지역으로 구성된 분석기만 번호를 파싱할 수 있어요:
GET /example-phone/_analyze
{
"analyzer" : "phone-ch",
"text" : "060 555 12 34"
}
{% include copy-curl.html %}
phone-search 분석기
반면 phone-search 분석기는 n-gram을 생성하지 않고 몇 가지 기본 토큰만 발행해요. 예를 들어 다음 요청을 보내고 phone-search 분석기를 지정하세요:
GET /example-phone/_analyze
{
"analyzer" : "phone-search",
"text" : "+41 60 555 12 34"
}
{% include copy-curl.html %}
응답에는 다음 토큰이 포함돼요:
["+41 60 555 12 34", "41 60 555 12 34", "41605551234", "605551234", "41"]