ElasticSearch自定义分析器(custom analyzer)
基于elasticsearch7.6.1 和 kibana7.6.1
一、基础知识
一个完整的分析器Analyzer包括如下三个组件:
- Character Filters: 对文本信息就行预处理,比如对原始文本删减或替换字符
- Token Filters: 分词后过滤,对分词后的词语列表进行处理(过滤,删除等)
- Tokenizer:分词器,即将原始文本按照一定规则切分为词语(token)
1. Character Filters
es内置的Character Filters包括:html_strip: 去除html标签, mapping:字符串替换|映射, pattern_replace: 正则匹配替换。
案例演示
# char_filter: "html_strip"去除 html 标签
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: 多个组合使用
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分词后的结果进行再加工,包括字符处理,过滤,删除等操作,es内置的Token Filters包括: lowercase(转小写), stop(删除停止词), synonym(添加同义词)。
案例演示
# filter: "stop"
# 默认停用词列表全是小写词语,单词'A'虽然是停用词,但因为是大写的,单独使用stop这个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来实现自定义的分析器
# 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"
]
}
}
}
}
}
# 使用自定义的分析器和标准分析器(注意观察两者结果的区别)
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>"
}
ElasticSearch自定义分析器(custom analyzer)相关推荐
- Elasticsearch 自定义分析器Analyzer
java学习讨论群:725562382 2,自定义分析器Analyzer curl -X PUT "192.168.0.120:9200/simple_example" -H 'C ...
- es - elasticsearch 自定义分析器 - 内建分词过滤器 - 11
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 自定义分析器 : Character filters : 1. 作用 : 字符的增.删.改转换 ...
- es - elasticsearch自定义分析器 - 内建分词过滤器 - 10
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 自定义分析器 : Character filters : 1. 作用 : 字符的增.删.改转换 ...
- ElasticSearch 自定义分词器Analyzer示例
一.前提概述 接下来定义一个index,并在该index中使用自定义分词器. 假设在ES中有这么一个index,用来存储用户在什么时间调用了哪个接口,调用的入参是什么的这么一个信息(即服务网关日志), ...
- Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
使用Elasticsearch 5,我们有一个字段,例如驾驶执照编号,其中的值可能包含特殊字符,并且由于用户在有限的验证范围内输入了值,因此值的大小写不一致. 例如,这些是假设值: CA-123-45 ...
- Elasticsearch:Standard Text Analyzer - 标准文本分析器
Elasticsearch 提供了超过很多开箱即用的分析器,我们可以在文本分析阶段使用它们. 这些分析器很可能足以满足基本情况,但如果需要创建自定义分析器,可以通过使用构成该模块的所需组件实例化一个新 ...
- Elasticsearch之分析(analysis)和分析器(analyzer)。
分析(analysis)是这样一个过程: 首先,表征化一个文本块为适用于倒排索引单独的词(term). 然后标准化这些词为标准形式,提高他们的"可搜索性"或"查全率&qu ...
- 【Es】ElasticSearch 自定义分词器
1.分词器 转载:https://blog.csdn.net/gwd1154978352/article/details/83343933 分词器首先看文章:[Elasticsearch]Elasti ...
- Elasticsearch:通过结合 Elasticsearch 词干分析器和同义词来提高搜索相关性
在之前的博客中,我们介绍了如何将同义词合并到由 Elasticsearch 驱动的应用程序中. 在这里,我以该博客为基础,展示了如何结合词干分析器(stemmer)和多词同义词(multi-word ...
最新文章
- python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...
- QNX6.5编译libcurl
- AtCoder AGC014E Blue and Red Tree (启发式合并)
- Web前端技术分享:全栈工程师常用的开发工具
- 浅读vue-router源码,了解vue-router基本原理
- Excel: 如何对Excel2007工作表做统一编辑修改
- 计算机软件在哪里建文本文档,如何新建文档
- 2017年全国大学生电子竞赛电源A题
- MSP430学习笔记(一)--从点灯说起
- 金仓数据库KingbaseES服务启动失败原因
- php normalize,PHP DOMNode normalize()用法及代码示例
- 项目分享之敲击床头盒控制床头灯的开关
- 爬了 48048 条评论,解读 9.3 分的「毒液」是否值得一看?
- php 没有读取权限能不能复制,“需要提供管理员权限才能复制此文件夹”怎么办...
- pytorch的transform中ToTensor接着Normalize
- 在南宁做网站找哪家好
- linux bind教程,Linux Bind系列视频教程(小耗子出品22集)
- 机器学习基础--回归(Regression)
- 通胀叙事下 美国难以重现沃尔克时代
- Java SPI实现插件化
热门文章
- 杭电计算机导师6,杭州电子科技大学计算机学院导师教师师资介绍简介-贾刚勇...
- android wifi布局,Android使用 WiFi 建立 P2P 连接
- vue实现头部吸顶描点
- zemax评价函数编辑器_zemax默认评价函数使用方法
- 22届计算机考研复试技巧以及注意事项高频问答35问Python集锦【一定要记牢】
- MySQL基础知识,如果有疏漏、错误的地方请大家指出
- 原生JS实现公告栏文字横向滚动(通告栏)
- python实现批量修改图片颜色
- react 发post请求 通过a标签 下载pdf文档
- a+aa+aaa+aaaa+aaaaa.....