Link Search Menu Expand Document Documentation Menu

电话号码分析器

analysis-phonenumber 插件提供了用于解析电话号码的分析器和分词器。需要专门的分析器,因为解析电话号码是一项不简单的任务(尽管初看起来可能很简单)。有关电话号码解析的常见误解,请参阅 程序员对电话号码的常见误解

OpenSearch 支持以下电话号码分析器

在内部,该插件使用 libphonenumber 库并遵循其解析规则。

电话号码分析器并非旨在在较大的文本中查找电话号码。相反,您应该将它们用于仅包含电话号码的字段。

安装插件

在使用电话号码分析器之前,您必须通过运行以下命令安装 analysis-phonenumber 插件

./bin/opensearch-plugin install analysis-phonenumber

指定默认区域

您可以通过在分析器中提供 phone-region 参数来选择性地指定解析电话号码的默认区域。有效的电话区域由 ISO 3166 国家代码表示。有关更多信息,请参阅 ISO 3166 国家代码列表

当对包含国际拨号前缀 + 的电话号码进行分词时,默认区域无关紧要。然而,对于使用国家前缀拨打国际号码的电话号码(例如,从大多数欧洲国家拨打北美使用 001 而不是 +1),则需要提供区域。您还可以通过指定区域来正确索引没有国际前缀的本地电话号码。

示例

以下请求创建一个索引,其中包含一个字段,用于摄取瑞士的电话号码(区域代码 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"
      }
    }
  }
}

电话分析器

phone 分析器根据给定的电话号码生成 n-gram。包含国际拨号前缀的(虚构的)瑞士电话号码可以带或不带瑞士特定的电话区域进行解析。因此,以下两个请求将产生相同的结果

GET /example-phone/_analyze
{
  "analyzer" : "phone-ch",
  "text" : "+41 60 555 12 34"
}

GET /example-phone/_analyze
{
  "analyzer" : "phone",
  "text" : "+41 60 555 12 34"
}

响应包含生成的 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"
}

phone-search 分析器

相比之下,phone-search 分析器不创建 n-gram,只发出一些基本词元。例如,发送以下请求并指定 phone-search 分析器

GET /example-phone/_analyze
{
  "analyzer" : "phone-search",
  "text" : "+41 60 555 12 34"
}

响应包含以下词元

["+41 60 555 12 34", "41 60 555 12 34", "41605551234", "605551234", "41"]
剩余 350 字符

有问题?

想要贡献?