Custom Analyzers - 自定义分析器

虽然Elasticsearch带有一些现成的分析器,但可以通过组合Character filter、Tokenizer、token filter来创建自定义的分析器。它使用以下相应的组合:

  • 零个或多个Character filter
  • 一个Tokenizer
  • 零个或多个Token filter

自定义Analyzer测试

如果使用默认的standard analyzer分析HTML文本,则不能识别HTML字符编码:

POST /_analyze
{
  "text": "I&apos;m in a <em>good</em> mood&nbsp;-&nbsp;and I <strong>love</strong> you"
}

image-20220724183453153

Elasticsearch中自带一个html_strip 字符过滤器,可以帮我们解析HTML编码:

image-20220724183543973

如果我们想实现以下功能,将三个组件组合起来实现一个自定义分析器能实现:

  1. 过滤HTML字符
  2. 将所有字符转换成小写
  3. 删除停用词

创建 analyzer_test索引,并在里面指定创建自定义分析器:

PUT /analyzer_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter": ["html_strip"],
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "stop"
            ]
        }
      }
    }
  }
}

使用my_custom_analyzer,成功满足上述的要求:

POST /analyzer_test/_analyze
{
  "analyzer": "my_custom_analyzer", 
  "text": "I&apos;m in a <em>good</em> mood&nbsp;-&nbsp;and I <strong>love</strong> you"
}

image-20220724184815793