Elasticsearch 用于html 去標(biāo)簽化搜索:即在Index的時(shí)候忽略html tag,同時(shí)又存儲(chǔ)了完整的html轩缤,
在使用的時(shí)候可以正常讀出來。
自定義html analyzer
PUT my_index
{
"settings": {
// 定義兩種過濾html標(biāo)記后渔肩,自動(dòng)生成的沒有html標(biāo)簽的index
"analysis": {
"analyzer": {
//對(duì)應(yīng)text類型
"html_text_analyzer": {
"tokenizer": "standard",
"char_filter": ["html_char_filter"]
},
//對(duì)應(yīng)keyword類型
"html_keyword_analyzer": {
"tokenizer": "keyword",
"filter":["trim"],
"char_filter": ["html_char_filter"]
}
},
"char_filter": {
"html_char_filter": {
"type": "html_strip"
}
}
}
},
"mappings": {
// 測(cè)試時(shí)使用字段子類型逼友,一個(gè)字段建立三種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"
}
}
}
}
}
}
// 測(cè)試html_text_analyzer
POST my_index/_analyze
{
"analyzer": "html_text_analyzer",
"text": "<p>I'm so <b>happy</b>!</p>"
}
// 返回結(jié)果
// 測(cè)試html_keyword_analyzer
POST my_index/_analyze
{
"analyzer": "html_keyword_analyzer",
"text": "<p>I'm so <b>happy</b>!</p>"
}
// 返回結(jié)果 去除html標(biāo)記后正常分解
{
"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
}
]
}
// 錄入數(shù)據(jù) 帶span標(biāo)記
POST my_index/_doc
{
"html":"<span>I'm so <b>happy</b>!</span>"
}
//返回結(jié)果 去除html標(biāo)記,全文被索引為一個(gè)keyword
{
"tokens" : [
{
"token" : "I'm so happy!",
"start_offset" : 0,
"end_offset" : 32,
"type" : "word",
"position" : 0
}
]
}
// 查詢index 結(jié)果化借,原始的text類型使用默認(rèn)analyzer潜慎,查詢span,能返回結(jié)果是應(yīng)為span也被索引了
POST my_index/_search
{
"query": {
"match": {
"html": "span"
}
}
}
// 查詢使用html_text_analyzer 建立的索引中的span,無返回結(jié)果結(jié)果,說明html標(biāo)記沒有被索引
POST my_index/_search
{
"query": {
"match": {
"html.html_text": "span"
}
}
}
// 查詢使用html_text_analyzer 建立的索引中的happy,能返回結(jié)果铐炫,html中text 被正常索引
POST my_index/_search
{
"query": {
"match": {
"html.html_text": "happy"
}
}
}
// 查詢使用html_keyword_analyzer 建立的索引中的happy,無返回結(jié)果垒手,因?yàn)檫@里要用keyword的查詢語法
POST my_index/_search
{
"query": {
"match": {
"html.html_keyword": "happy"
}
}
}