映射字符过滤器编辑

mapping 字符过滤器接受一个键值对映射。每当它遇到一个与键相同的字符串时,它就会用与该键关联的值替换它们。

匹配是贪婪的;在给定点匹配的最长模式获胜。允许替换为空字符串。

mapping 过滤器使用 Lucene 的 MappingCharFilter

示例编辑

以下 分析 API 请求使用 mapping 过滤器将印度-阿拉伯数字 (٠‎١٢٣٤٥٦٧٨‎٩‎) 转换为阿拉伯-拉丁等效数字 (0123456789),将文本 My license plate is ٢٥٠١٥ 更改为 My license plate is 25015

response = client.indices.analyze(
  body: {
    tokenizer: 'keyword',
    char_filter: [
      {
        type: 'mapping',
        mappings: [
          '٠ => 0',
          '١ => 1',
          '٢ => 2',
          '٣ => 3',
          '٤ => 4',
          '٥ => 5',
          '٦ => 6',
          '٧ => 7',
          '٨ => 8',
          '٩ => 9'
        ]
      }
    ],
    text: 'My license plate is ٢٥٠١٥'
  }
)
puts response
GET /_analyze
{
  "tokenizer": "keyword",
  "char_filter": [
    {
      "type": "mapping",
      "mappings": [
        "٠ => 0",
        "١ => 1",
        "٢ => 2",
        "٣ => 3",
        "٤ => 4",
        "٥ => 5",
        "٦ => 6",
        "٧ => 7",
        "٨ => 8",
        "٩ => 9"
      ]
    }
  ],
  "text": "My license plate is ٢٥٠١٥"
}

过滤器生成以下文本

[ My license plate is 25015 ]

可配置参数编辑

mappings

(必填*, 字符串数组) 映射数组,每个元素都具有 key => value 的形式。

必须指定此参数或 mappings_path 参数。

mappings_path

(必填*, 字符串) 包含 key => value 映射的文件路径。

此路径必须是相对于 config 位置的绝对路径或相对路径,并且文件必须是 UTF-8 编码的。文件中每个映射必须用换行符分隔。

必须指定此参数或 mappings 参数。

自定义和添加到分析器编辑

要自定义 mappings 过滤器,请复制它以创建新自定义字符过滤器的基础。您可以使用其可配置参数修改过滤器。

以下 创建索引 API 请求使用自定义 mappings 过滤器 my_mappings_char_filter 配置一个新的 自定义分析器

my_mappings_char_filter 过滤器将 :):( 表情符号替换为文本等效项。

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          my_analyzer: {
            tokenizer: 'standard',
            char_filter: [
              'my_mappings_char_filter'
            ]
          }
        },
        char_filter: {
          my_mappings_char_filter: {
            type: 'mapping',
            mappings: [
              ':) => _happy_',
              ':( => _sad_'
            ]
          }
        }
      }
    }
  }
)
puts response
PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "char_filter": [
            "my_mappings_char_filter"
          ]
        }
      },
      "char_filter": {
        "my_mappings_char_filter": {
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      }
    }
  }
}

以下 分析 API 请求使用自定义 my_mappings_char_filter:( 替换为 _sad_,文本为 I'm delighted about it :(

GET /my-index-000001/_analyze
{
  "tokenizer": "keyword",
  "char_filter": [ "my_mappings_char_filter" ],
  "text": "I'm delighted about it :("
}

过滤器生成以下文本

[ I'm delighted about it _sad_ ]