HTML 剥离字符过滤器

HTML 剥离字符过滤器 #

HTML 剥离(html_strip)字符过滤器会从输入文本中移除 HTML 标签(例如 <div><p><a> 等)并输出纯文本。该过滤器可以配置保留某些标签,或者配置把特定的 HTML 标签实体(如 &nbsp;)解码为空格。

参考样例 #

以下请求展示将 html_strip 字符过滤器应用于文本:

GET /_analyze
{
  "tokenizer": "keyword",
  "char_filter": [
    "html_strip"
  ],
  "text": "<p>Commonly used calculus symbols include &alpha;, &beta; and &theta; </p>"
}

返回内容中包含的词元里,可以看到 HTML 字符已被转换为它们的解码后的值:

{
  "tokens": [
    {
      "token": "\nCommonly used calculus symbols include α, β and θ \n",
      "start_offset": 0,
      "end_offset": 74,
      "type": "word",
      "position": 0
    }
  ]
}

参数说明 #

html_strip 字符过滤器可以使用以下参数进行配置。

参数必填/可选数据类型描述
escaped_tags可选字符串数组一个 HTML 元素名称列表,指定时不带包围的尖括号(< >)。当从文本中去除 HTML 标签时,过滤器不会移除该列表中的元素。例如,将该配置设置为 ["b", "i"]时, 将防止 <b><i> 元素被去除。

示例:带有小写过滤器的自定义分词器 #

以下请求创建了一个自定义分词器,该分词器通过使用 html_strip 字符过滤器来去除 HTML 标签,并通过 lowercase 词元过滤器将纯文本转换为小写形式:

PUT /html_strip_and_lowercase_analyzer
{
  "settings": {
    "analysis": {
      "char_filter": {
        "html_filter": {
          "type": "html_strip"
        }
      },
      "analyzer": {
        "html_strip_analyzer": {
          "type": "custom",
          "char_filter": ["html_filter"],
          "tokenizer": "standard",
          "filter": ["lowercase"]
        }
      }
    }
  }
}

使用以下请求来检查使用该分词器生成的词元:

GET /html_strip_and_lowercase_analyzer/_analyze
{
  "analyzer": "html_strip_analyzer",
  "text": "<h1>Welcome to <strong>Easysearch</strong>!</h1>"
}

在返回内容中,HTML 标签已被移除,并且纯文本已被转换为小写形式:

{
  "tokens": [
    {
      "token": "welcome",
      "start_offset": 4,
      "end_offset": 11,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "to",
      "start_offset": 12,
      "end_offset": 14,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "easysearch",
      "start_offset": 23,
      "end_offset": 42,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}

示例:保留 HTML 标签的自定义分词器 #

以下示例请求创建了一个能保留 HTML 标签的自定义分词器:

PUT /html_strip_preserve_analyzer
{
  "settings": {
    "analysis": {
      "char_filter": {
        "html_filter": {
          "type": "html_strip",
          "escaped_tags": ["b", "i"]
        }
      },
      "analyzer": {
        "html_strip_analyzer": {
          "type": "custom",
          "char_filter": ["html_filter"],
          "tokenizer": "keyword"
        }
      }
    }
  }
}

使用以下请求来检查使用该分词器生成的词元:

GET /html_strip_preserve_analyzer/_analyze
{
  "analyzer": "html_strip_analyzer",
  "text": "<p>This is a <b>bold</b> and <i>italic</i> text.</p>"
}

在返回内容中,正如在自定义分词器请求中所指定的那样,斜体 italic 标签和加粗 bold 标签已被保留。

{
  "tokens": [
    {
      "token": "\nThis is a <b>bold</b> and <i>italic</i> text.\n",
      "start_offset": 0,
      "end_offset": 52,
      "type": "word",
      "position": 0
    }
  ]
}