# purecloudlabs/elasticsearch-phone architecture

> Architecture diagram of the GitHub repository purecloudlabs/elasticsearch-phone, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/purecloudlabs/elasticsearch-phone
- Repository: https://github.com/purecloudlabs/elasticsearch-phone

## Overview

Elasticsearch-Phone is an Elasticsearch analysis plugin for indexing and searching phone numbers, SIP URIs, and email addresses. Elasticsearch registers three analyzer providers: `phone` and `phone-email` produce indexing tokens, while `phone-search` performs lighter query-side normalization. Each analyzer builds a tokenizer that applies its term extractors; phone extraction handles prefixes, optional libphonenumber parsing, and number prefixes, while email extraction splits email components. The README documents intended index/search use. Source excerpts show analyzer construction and extraction calls; plugin-host invocation and runtime wiring beyond registration are not shown.

Main entry points: [`src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java`](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java) (Analyzer binder), [`src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java`](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java) (Phone-email analyzer), [`src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java`](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java) (Extractor tokenizer), [`src/main/java/org/elasticsearch/index/analysis/TermExtractor.java`](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractor.java) (Extractor contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_registration["Plugin registration"]
  node_plugin["Phone plugin<br/>[PhonePlugin.java]"]
  node_binder["Analyzer binder"]
  node_phone_provider["Phone provider"]
  node_email_provider["Phone-email provider"]
  node_search_provider["Search provider"]
end

subgraph group_analyzers["Analyzer variants"]
  node_phone_analyzer["Phone analyzer<br/>[PhoneAnalyzer.java]"]
  node_email_analyzer["Phone-email analyzer"]
  node_search_analyzer["Search analyzer"]
end

subgraph group_tokenization["Tokenization"]
  node_tokenizer["Extractor tokenizer"]
  node_extractor_contract["Extractor contract<br/>[TermExtractor.java]"]
  node_phone_extractor["Phone term extraction"]
  node_email_extractor["Email term extraction"]
  node_search_extractor["Search term extraction"]
end

node_elasticsearch(("Elasticsearch"))

node_plugin -->|"installs processor"| node_binder
node_binder -->|"registers analyzer"| node_phone_provider
node_binder -->|"registers analyzer"| node_email_provider
node_binder -->|"registers analyzer"| node_search_provider
node_phone_provider -->|"provides"| node_phone_analyzer
node_email_provider -->|"provides"| node_email_analyzer
node_search_provider -->|"provides"| node_search_analyzer
node_elasticsearch -->|"configures indexing"| node_phone_provider
node_elasticsearch -->|"configures indexing"| node_email_provider
node_elasticsearch -->|"configures search"| node_search_provider
node_phone_analyzer -->|"constructs"| node_tokenizer
node_phone_analyzer -->|"uses"| node_phone_extractor
node_email_analyzer -->|"constructs"| node_tokenizer
node_email_analyzer -->|"uses"| node_phone_extractor
node_email_analyzer -->|"uses"| node_email_extractor
node_search_analyzer -->|"constructs"| node_tokenizer
node_search_analyzer -->|"uses"| node_search_extractor
node_tokenizer -->|"calls"| node_extractor_contract
node_phone_extractor -->|"implements"| node_extractor_contract
node_email_extractor -->|"implements"| node_extractor_contract
node_search_extractor -->|"implements"| node_extractor_contract

click node_plugin "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhonePlugin.java"
click node_binder "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java"
click node_phone_provider "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneAnalyzerProvider.java"
click node_email_provider "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneEmailAnalyzerProvider.java"
click node_search_provider "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneSearchAnalyzerProvider.java"
click node_phone_analyzer "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneAnalyzer.java"
click node_email_analyzer "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java"
click node_search_analyzer "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneSearchAnalyzer.java"
click node_tokenizer "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java"
click node_extractor_contract "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractor.java"
click node_phone_extractor "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneTermExtractor.java"
click node_email_extractor "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/EmailTermExtractor.java"
click node_search_extractor "https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneSearchTermExtractor.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin,node_binder,node_phone_provider,node_email_provider,node_search_provider toneBlue
class node_phone_analyzer,node_email_analyzer,node_search_analyzer toneAmber
class node_tokenizer,node_extractor_contract,node_phone_extractor,node_email_extractor,node_search_extractor toneMint
class node_elasticsearch toneIndigo
```

## Components

### Plugin registration

- [Phone plugin](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhonePlugin.java): `src/main/java/org/elasticsearch/plugins/analysis/phone/PhonePlugin.java`
- [Analyzer binder](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java): `src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java`
- [Phone provider](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneAnalyzerProvider.java): `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneAnalyzerProvider.java`
- [Phone-email provider](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneEmailAnalyzerProvider.java): `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneEmailAnalyzerProvider.java`
- [Search provider](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneSearchAnalyzerProvider.java): `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneSearchAnalyzerProvider.java`

### Analyzer variants

- [Phone analyzer](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneAnalyzer.java): `src/main/java/org/elasticsearch/index/analysis/PhoneAnalyzer.java`
- [Phone-email analyzer](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java): `src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java`
- [Search analyzer](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneSearchAnalyzer.java): `src/main/java/org/elasticsearch/index/analysis/PhoneSearchAnalyzer.java`

### Tokenization

- [Extractor tokenizer](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java): `src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java`
- [Extractor contract](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/TermExtractor.java): `src/main/java/org/elasticsearch/index/analysis/TermExtractor.java`
- [Phone term extraction](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneTermExtractor.java): `src/main/java/org/elasticsearch/index/analysis/PhoneTermExtractor.java`
- [Email term extraction](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/EmailTermExtractor.java): `src/main/java/org/elasticsearch/index/analysis/EmailTermExtractor.java`
- [Search term extraction](https://github.com/purecloudlabs/elasticsearch-phone/blob/master/src/main/java/org/elasticsearch/index/analysis/PhoneSearchTermExtractor.java): `src/main/java/org/elasticsearch/index/analysis/PhoneSearchTermExtractor.java`

### Other components

- **Elasticsearch**

## Connections

- Phone plugin → Analyzer binder: installs processor (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/PhonePlugin.java`)
- Analyzer binder → Phone provider: registers analyzer (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java`)
- Analyzer binder → Phone-email provider: registers analyzer (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java`)
- Analyzer binder → Search provider: registers analyzer (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/CustomAnalysisBinderProcessor.java`)
- Phone provider → Phone analyzer: provides (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneAnalyzerProvider.java`)
- Phone-email provider → Phone-email analyzer: provides (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneEmailAnalyzerProvider.java`)
- Search provider → Search analyzer: provides (evidence: `src/main/java/org/elasticsearch/plugins/analysis/phone/PhoneSearchAnalyzerProvider.java`)
- Elasticsearch → Phone provider: configures indexing (evidence: `README.md`)
- Elasticsearch → Phone-email provider: configures indexing (evidence: `README.md`)
- Elasticsearch → Search provider: configures search (evidence: `README.md`)
- Phone analyzer → Extractor tokenizer: constructs (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneAnalyzer.java`)
- Phone analyzer → Phone term extraction: uses (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneAnalyzer.java`)
- Phone-email analyzer → Extractor tokenizer: constructs (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java`)
- Phone-email analyzer → Phone term extraction: uses (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java`)
- Phone-email analyzer → Email term extraction: uses (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneEmailAnalyzer.java`)
- Search analyzer → Extractor tokenizer: constructs (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneSearchAnalyzer.java`)
- Search analyzer → Search term extraction: uses (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneSearchAnalyzer.java`)
- Extractor tokenizer → Extractor contract: calls (evidence: `src/main/java/org/elasticsearch/index/analysis/TermExtractorTokenizer.java`)
- Phone term extraction → Extractor contract: implements (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneTermExtractor.java`)
- Email term extraction → Extractor contract: implements (evidence: `src/main/java/org/elasticsearch/index/analysis/EmailTermExtractor.java`)
- Search term extraction → Extractor contract: implements (evidence: `src/main/java/org/elasticsearch/index/analysis/PhoneSearchTermExtractor.java`)
