Elasticsearch 用于html 去标签化搜索

Elasticsearch 用于html 去标签化搜索:即在Index的时候忽略html tag,同时又存储了完整的html,
在使用的时候可以正常读出来。

自定义html analyzer


PUT my_index
{
  "settings": {
    // 定义两种过滤html标记后,自动生成的没有html标签的index
    "analysis": {
      "analyzer": {
        //对应text类型
        "html_text_analyzer": {
          "tokenizer": "standard",
          "char_filter": ["html_char_filter"]
        },
        //对应keyword类型
        "html_keyword_analyzer": {
          "tokenizer": "keyword",
          "filter":["trim"],
          "char_filter": ["html_char_filter"]
        }
      },
      "char_filter": {
        "html_char_filter": {
          "type": "html_strip"
        }
      }
    }
  },
  "mappings": {
    // 测试时使用字段子类型,一个字段建立三种index方便比较
    "properties": {
      "html":{
        "type": "text",
        "fields": {
          "html_text":{
            "search_analyzer": "simple",
            "analyzer":"html_text_analyzer",
            "type":"text"
          },
          "html_keyword":{
            "analyzer":"html_keyword_analyzer",
            "type":"text"
          }
        }
      }
    }
  }
}

// 测试html_text_analyzer
POST my_index/_analyze
{
  "analyzer": "html_text_analyzer",
  "text": "<p>I&apos;m so <b>happy</b>!</p>"
}
// 返回结果


// 测试html_keyword_analyzer
POST my_index/_analyze
{
  "analyzer": "html_keyword_analyzer",
  "text": "<p>I&apos;m so <b>happy</b>!</p>"
}

// 返回结果  去除html标记后正常分解
{
  "tokens" : [
    {
      "token" : "I'm",
      "start_offset" : 3,
      "end_offset" : 11,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "so",
      "start_offset" : 12,
      "end_offset" : 14,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "happy",
      "start_offset" : 18,
      "end_offset" : 27,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}


// 录入数据 带span标记
POST my_index/_doc
{
  "html":"<span>I&apos;m so <b>happy</b>!</span>"
}

//返回结果 去除html标记,全文被索引为一个keyword
{
  "tokens" : [
    {
      "token" : "I'm so happy!",
      "start_offset" : 0,
      "end_offset" : 32,
      "type" : "word",
      "position" : 0
    }
  ]
}


// 查询index 结果,原始的text类型使用默认analyzer,查询span,能返回结果是应为span也被索引了
POST my_index/_search
{
  "query": {
    "match": {
      "html": "span"
    }
  }
}

// 查询使用html_text_analyzer 建立的索引中的span,无返回结果结果,说明html标记没有被索引
POST my_index/_search
{
  "query": {
    "match": {
      "html.html_text": "span"
    }
  }
}


// 查询使用html_text_analyzer 建立的索引中的happy,能返回结果,html中text 被正常索引
POST my_index/_search
{
  "query": {
    "match": {
      "html.html_text": "happy"
    }
  }
}

// 查询使用html_keyword_analyzer 建立的索引中的happy,无返回结果,因为这里要用keyword的查询语法
POST my_index/_search
{
  "query": {
    "match": {
      "html.html_keyword": "happy"
    }
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值