ElasticSearch自定义分析器(custom analyzer)
基于elasticsearch7.6.1 和 kibana7.6.1
一、基礎(chǔ)知識
一個(gè)完整的分析器Analyzer包括如下三個(gè)組件:
1. Character Filters
es內(nèi)置的Character Filters包括:html_strip: 去除html標(biāo)簽, mapping:字符串替換|映射, pattern_replace: 正則匹配替換。
案例演示
# char_filter: "html_strip"去除 html 標(biāo)簽
POST _analyze
{
? "char_filter": [
? ? "html_strip"
? ],
? "tokenizer": "standard",
? "text": "<html><body><div><span>You Know, for Search<span></div><body><html>"
}
# char_filter: "mapping"字符串替換|映射
POST _analyze
{
? "char_filter": [
? ? {
? ? ? "type": "mapping",
? ? ? "mappings": [
? ? ? ? "&=>and",
? ? ? ? "&&=>and"
? ? ? ]
? ? }
? ],
? "tokenizer": "standard",
? "text": "You & me, go && java"
}
?# char_filter: "pattern_replace"正則匹配替換
POST _analyze
{
? "char_filter": [
? ? {
? ? ? "type": "pattern_replace",
? ? ? "pattern": "(v[0-9.]+)",
? ? ? "replacement": "latest version"
? ? }
? ],?
? "tokenizer": "standard",
? "text": "kibana v7.6.1 and elasticsearch v7.6.1"
}
# char_filter: 多個(gè)組合使用
POST _analyze
{
? "char_filter": [
? ? "html_strip",
? ? {
? ? ? "type": "mapping",
? ? ? "mappings": [
? ? ? ? "&=>and",
? ? ? ? "&&=>and"
? ? ? ]
? ? },
? ? {
? ? ? "type": "pattern_replace",
? ? ? "pattern": "(v[0-9.]+)",
? ? ? "replacement": "latest version"
? ? }
? ],
? "tokenizer": "standard",
? "text": "<html><body><div><span>kibana v7.6.1 && elasticsearch v7.6.1<span></div><body><html>"
}?
2. Token Filters
Token Filters對Tokenizer分詞后的結(jié)果進(jìn)行再加工,包括字符處理,過濾,刪除等操作,es內(nèi)置的Token Filters包括: lowercase(轉(zhuǎn)小寫), stop(刪除停止詞), synonym(添加同義詞)。
案例演示
# filter: "stop"
# 默認(rèn)停用詞列表全是小寫詞語,單詞'A'雖然是停用詞,但因?yàn)槭谴髮懙?#xff0c;單獨(dú)使用stop這個(gè)token filter無法將其過濾掉。
POST _analyze
{
? "tokenizer": "standard",
? "filter": [
? ? "stop"
? ],
? "text": "A man sat alone on a stone bench"
}
# filter: "stop" and "lowercase"
# 注意兩者的作用順序
POST _analyze
{
? "tokenizer": "standard",
? "filter": [
? ? "lowercase",
? ? "stop"
? ],
? "text": "A man sat alone on a stone bench"
}
二、在索引中自定義分析器Analyzer
案例演示
案例01
# 通過組合character filter, tokernizer, token filter來實(shí)現(xiàn)自定義的分析器
# standard_custom: 是自定義分析器的名稱
PUT movies
{
? "settings": {
? ? "number_of_replicas": 1,
? ? "number_of_shards": 1,
? ? "analysis": {
? ? ? "analyzer": {
? ? ? ? "standard_custom": {
? ? ? ? ? "type": "custom",
? ? ? ? ? "char_filter": [
? ? ? ? ? ? "html_strip"
? ? ? ? ? ],
? ? ? ? ? "tokenizer": "standard",
? ? ? ? ? "filter": [
? ? ? ? ? ? "lowercase",
? ? ? ? ? ? "stop"
? ? ? ? ? ]
? ? ? ? }
? ? ? }
? ? }
? }
}?
# 使用自定義的分析器和標(biāo)準(zhǔn)分析器(注意觀察兩者結(jié)果的區(qū)別)
GET movies/_analyze
{
? "analyzer": "standard_custom",
? "text": "<html><body><div><span>A man sat alone on a stone bench<span></div><body><html>"
}
GET movies/_analyze
{
? "analyzer": "standard",
? "text": "<html><body><div><span>A man sat alone on a stone bench<span></div><body><html>"
}
案例02
PUT songs
{
? "settings": {
? ? "number_of_replicas": 1,
? ? "number_of_shards": 1,
? ? "analysis": {
? ? ? "char_filter": {
? ? ? ? "CF1": {
? ? ? ? ? "type": "pattern_replace",
? ? ? ? ? "pattern": "(v[0-9.]+)",
? ? ? ? ? "replacement": "latest version"
? ? ? ? },
? ? ? ? "CF2": {
? ? ? ? ? "type": "mapping",
? ? ? ? ? "mappings": [
? ? ? ? ? ? "&=>and",
? ? ? ? ? ? "&&=>and"
? ? ? ? ? ]
? ? ? ? }
? ? ? },
? ? ? "analyzer": {
? ? ? ? "standard_custom": {
? ? ? ? ? "type": "custom",
? ? ? ? ? "char_filter": [
? ? ? ? ? ? "html_strip",
? ? ? ? ? ? "CF1",
? ? ? ? ? ? "CF2"
? ? ? ? ? ],
? ? ? ? ? "tokenizer": "standard",
? ? ? ? ? "filter": [
? ? ? ? ? ? "lowercase",
? ? ? ? ? ? "stop"
? ? ? ? ? ]
? ? ? ? }
? ? ? }
? ? }
? }
}?
# 使用自定義的分析器
GET songs/_analyze
{
? "analyzer": "standard_custom",
? "text": "<html><body><div><span>A man sat alone on a stone bench & kibana v7.6.1 && elasticsearch v7.6.1<span></div><body><html>"
}?
總結(jié)
以上是生活随笔為你收集整理的ElasticSearch自定义分析器(custom analyzer)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: custom_filter
- 下一篇: echart实现custom自定义色块功