如何在没有HTML的情况下在elasticsearch中存储文档?

时间:2017-08-28 08:22:01

标签: html elasticsearch mapping

我想索引包含中文字符/单词的文档。在某些字段中还有一些HTML标记。

我使用“html_strip”来避免将HTML编入索引,但我的问题是文档与弹性搜索中的HTML一起存储。这是我的索引设置和映射:

PUT test
{
  "settings" : {
    "index" : {
        "number_of_shards" : 1, 
        "number_of_replicas" : 0
    },
    "analysis": {
      "analyzer": {
        "ch_analyzer": {
          "tokenizer": "icu_tokenizer",
          "char_filter":  [ "html_strip" ]
        }
      }
    }
  },
  "mappings": {
    "qa": {
      "properties": {
        "comment_desc": {
          "type":     "text",
          "analyzer": "ch_analyzer"
        },
        "article_title": {
          "type":     "text",
          "analyzer": "ch_analyzer"
        },
        "article_desc": {
          "type":     "text",
          "analyzer": "ch_analyzer"
        }
      }
    }, 
    "sport": {
      "properties": {
        "title": {
          "type":     "text",
          "analyzer": "ch_analyzer"
        },
        "content": {
          "type":     "text",
          "analyzer": "ch_analyzer"
        }
      }
    }
  }
}

例如,我有以下内容:

"<p><br/>台灣人,奧運直播,使用PPStream,(PPS網路電視),觀看同步奧運實況</b>!"

它实际上是索引的,但它将按原样存储。

我应该对我的映射进行哪些更改,以删除存储文档中的HTML部分? 如何将此文本存储在我的Elasticsearch中,并删除其HTML组件?

1 个答案:

答案 0 :(得分:1)

如果要在Elasticsearch上执行此操作(而不是作为预处理步骤),则必须使用ingest node。没有任何ingest processor完全符合您的要求,因此您必须使用脚本处理器或编写插件来执行此操作。

根据您的使用情况,可能更容易在预处理步骤中执行此操作(使用您选择的语言编写代码)。