infinilabs / analysis-ik

🚌 The IK Analysis plugin integrates Lucene IK analyzer into Elasticsearch and OpenSearch, support customized dictionary.
Apache License 2.0
16.58k stars 3.27k forks source link

es2.4.4 ik分词及html_strip无效 #382

Open zhixiao opened 7 years ago

zhixiao commented 7 years ago

我的配置文件是这样的,现在想在索引数据的时候将html过滤掉,但是使用这种配置方式进行数据索引之后,查看数据html标签依然存在,不解! { "settings":{ "analysis":{ "analyzer": { "ik_max_word": { "type": "ik", "use_smart": false }, "ik_html_strip": { "char_filter": [ "html_strip" ], "type": "custom", "tokenizer": "ik", "use_smart": false }, "html_strip": { "char_filter": [ "html_strip" ], "tokenizer": "standard" } } }

},
"mappings":{
    "list": {
        "dynamic": true,
        "properties": {
            "domain_id":{
                "type":"integer"
            },
            "info_id": {
                "type": "integer"
            },
            "user_id":{
                "type": "integer"
            },
            "title":{
                "type":"string",
                "index":"analyzed",
                "analyzer":"ik_max_word",
                "search_analyzer":"ik_max_word",
                "include_in_all": "true",
                "boost": 7
            },
            "newstype":{
                "type": "integer"
            },
            "sources":{
                "type": "string",
                "index": "not_analyzed"
            },
            "formurl":{
                "type": "string",
                "index": "not_analyzed"
            },
            "content":{
                "type":"string",
                "index":"analyzed",
                "analyzer":"ik_max_word",
                "search_analyzer":"ik_max_word",
                "include_in_all": "true",
                "boost": 7
            },
            "picture":{
                "type":"string",
                "index":"not_analyzed"
            },
            "isflag":{
                "type":"integer"
            },
            "created":{
                "type":"integer"
            }
        }
    }
}

}

medcl commented 7 years ago

https://elasticsearch.cn/question/1501

airycanon commented 7 years ago

@medcl 借楼请教个类似的问题,我用 logstash-jdbc-input 从 MySQL 导入 HTML 到 Elasticsearch,Elasticsearch 和 Logstash 版本号都是 5.4.1,索引设置如下:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_html_strip": {
          "type": "custom",
          "tokenizer": "ik_smart",
          "char_filter": ["html_strip"]
        }
      }
    }
  },
  "mappings": {
    "articles": {
      "_all": {
        "analyzer": "ik_smart",
        "search_analyzer": "ik_smart",
        "term_vector": "no",
        "store": "false"
      },
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "ik_html_strip",
          "search_analyzer": "ik_html_strip",
          "include_in_all": "false",
          "boost": 8
        },
        "title": {
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart",
          "include_in_all": "true",
          "boost": 8
        }
      }
    }
  }
}

请求如下:

{
  "query": {
    "multi_match": {
      "query": "中国",
      "fields": [
        "title",
        "content"
      ]
    }
  },
  "highlight": {
    "pre_tags": [
      "<tag1>"
    ],
    "post_tags": [
      "</tag1>"
    ],
    "fields": {
      "content": {
      },
      "title": {
      }
    }
  }
}

搜索结果中的 content 并没有过滤掉 HTML 标签(只贴出了 highlight 部分):

{
  "highlight": {
    "title": [
      "分享:弘扬<tag1>中国</tag1>精神的优秀原创歌曲《一样的<tag1>中国</tag1>梦》"
    ],
    "content": [
      "人民为中心的创作导向,聚焦<tag1>中国</tag1>梦的时代主题,传承中华民族传统文化,弘扬爱国主义精神曲,</span><span>本曲已在酷狗、 QQ",
      "音乐等可以下载,全民K歌、全国KTV上线,欢迎点唱,支持闽南小中原创。</span></p><p><span>歌名:<span>《一样的<tag1>中国</tag1>梦",
      "爱家乡</span></p><p><span>文明<tag1>中国</tag1>梦和谐的天堂</span></p><p><span>我的<tag1>中国</tag1>梦也和你一样</span></p><p><span>复兴<tag1>中国</tag1>梦民富国又强</span>",
      "</p><p><span>一样的<tag1>中国</tag1>梦充满着希望</span>"
    ]
  }
}

恳请指点一下是哪里的问题,谢谢。

medcl commented 7 years ago

上面贴的连接已经解答了,analyzer只作用于索引,对原始的source不做操作。

airycanon commented 7 years ago

不好意思,还是不太明白,我的理解是,搜索结果的 highlight 应该是 search_analyzer 作用之后的结果,这里用了 ik_html_strip,那么 ik_smart 和 html_strip 都应该有效果的,实际上却只有 ik_smart 有效果,烦请您再解释一下。

medcl commented 7 years ago

hightlight的数据源是_source,也就是索引的json数据,而不是analysis的数据。

fudali113 commented 7 years ago

@medcl 那是不是使用ik_html_strip分词后的token不会包含html标签?没有看到ik_html_strip相关的文档,所以请教一下,谢谢

medcl commented 7 years ago

@fudali113 是的,analysis 的结果不包括的,你可以使用 analyze 接口测试的。