# 自定义分析器

URL: https://caijiao.org/elasticsearch/03.advanced/03.analyzer-custom
Source: docs/elasticsearch/03.advanced/03.analyzer-custom.md
Description: 本章介绍如何在 Elasticsearch 中创建和配置自定义分析器，灵活组合分词器与过滤器，满足特定业务需求。

Elasticsearch 允许用户根据业务需求，自定义分析器（Analyzer），通过组合分词器（Tokenizer）、字符过滤器（Char Filter）和令牌过滤器（Token Filter）来实现个性化的文本处理和索引策略。

## 1. 自定义分析器组成

- **字符过滤器（Char Filter）**：预处理文本，如替换字符、HTML 标签处理  
- **分词器（Tokenizer）**：将文本拆分为词项  
- **令牌过滤器（Token Filter）**：对分词结果进行处理，如小写转换、同义词替换、停用词过滤

## 2. 创建自定义分析器示例

```json
PUT /my-index
{
  "settings": {
    "analysis": {
      "char_filter": {
        "replace_filter": {
          "type": "mapping",
          "mappings": ["&=>和"]
        }
      },
      "filter": {
        "my_stop": {
          "type": "stop",
          "stopwords": ["的", "了", "和"]
        }
      },
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter": ["replace_filter"],
          "tokenizer": "standard",
          "filter": ["lowercase", "my_stop"]
        }
      }
    }
  }
}
````

该示例定义了一个自定义分析器 `my_custom_analyzer`，包含字符替换、小写转换和停用词过滤。

## 3. 使用自定义分析器

指定索引时，设置字段使用该分析器：

```json
PUT /my-index/_mapping
{
  "properties": {
    "content": {
      "type": "text",
      "analyzer": "my_custom_analyzer"
    }
  }
}
```

## 4. 注意事项

* 自定义分析器适合复杂文本处理需求
* 配置时需保证组件顺序合理，避免冲突
* 调试时可使用 `_analyze` API 测试分析效果

---

通过自定义分析器，用户可以实现精准的文本解析与索引，提升搜索的相关性和灵活性。
