2023-02-06 Elasticsearch 分词器相关

news/2025/3/29 5:17:33/

分词器是es中的一个组件,通俗意义上理解,就是将一段文本按照一定的逻辑,分析成多个词语,同时对这些词语进行常规化的一种工具;ES会将text格式的字段按照分词器进行分词,并编排成倒排索引,正是因为如此,es的查询才如此之快;
在这里插入图片描述

1 normalization 规范化

在这里插入图片描述

2 character filter 字符过滤器

分词之前的预处理,过滤无用字符

2.1 HTML Strip

在这里插入图片描述

PUT /define_index
{"settings": {"analysis": {"char_filter": {"define_char_filter": {"type": "html_strip"}},"analyzer": {"define_analyzer": {"tokenizer": "keyword","char_filter": ["define_char_filter"]}}}}
}

自定义字符过滤器define_analyzer,作用是过滤数据中的html标签

GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["<p>I; m so <a>happy</a></p>"]
}

在这里插入图片描述
可使用"escaped_tags":[“a”]设置保留不被过滤的标签
在这里插入图片描述

2.2 Mapping

PUT /define_index
{"settings": {"analysis": {"char_filter": {"define_char_filter": {"type": "mapping","mappings": ["滚 => *", "垃圾 => 可爱"]}},"analyzer": {"define_analyzer": {"tokenizer": "keyword","char_filter": ["define_char_filter"]}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["<p>你好啊 你这个大垃圾, 滚犊子"]
}

在这里插入图片描述
通过自定义的过滤器,可以将聊天、留言或者弹幕之类的发言根据需求进行屏蔽或替换。

2.3 Pattern Replace

PUT /define_index
{"settings": {"analysis": {"char_filter": {"define_char_filter": {"type": "pattern_replace","pattern": "(\\d{3})\\d{4}(\\d{4})","replacement": "$1****$2"}},"analyzer": {"define_analyzer": {"tokenizer": "keyword","char_filter": ["define_char_filter"]}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["电话号码:13792223536"]
}

在这里插入图片描述
通过正则表达式进行数据的替换。

3 token filter 令牌过滤器

停用词、时态转换、大小写转换、同义词转换、语气词处理等。

PUT /define_index
{"settings": {"analysis": {"filter": {"define_synonym": {"type": "synonym","synonyms": ["东邪 => 黄药师","西毒 => 欧阳锋","南帝 => 段智兴","北丐 => 洪七公"]}},"analyzer": {"define_analyzer": {"tokenizer": "standard","filter": ["define_synonym"]}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["东邪", "西毒"]
}

在这里插入图片描述
可以看到"东邪"检索到"黄药师"的分词,"西毒"检索到"欧阳锋"的分词。
除了自定义的以外,也可以使用ES自带的,比如大小写的转换:
在这里插入图片描述
在这里插入图片描述
甚至可以通过自定义脚本动态的控制过滤逻辑,比如将长度小于5的字符串转为全大写:

GET /define_index/_analyze
{"tokenizer": "standard","filter": {"type": "condition","filter": "uppercase","script": {"source": "token.getTerm().length() < 5"}},"text": ["FeeNIXee IanlXD DOc dkkkk kkk ddd ds"]
}

在这里插入图片描述
也可以将一些语句中没有什么意义的语气词等作为停用词不参与检索:

PUT /define_index
{"settings": {"analysis": {"analyzer": {"define_analyzer": {"type": "standard","stopwords": "_english_"}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["FeeNIXee IanlXD DOc and is or ds"]
}

在这里插入图片描述
也可以将一些语句中不管有没有意义所有的词都不作为停用词参与检索:

PUT /define_index
{"settings": {"analysis": {"analyzer": {"define_analyzer": {"type": "standard","stopwords": "_none_"}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["FeeNIXee IanlXD DOc and is or ds"]
}

在这里插入图片描述
当然也可以手动自定义去设置那些词作为停用词使用:

PUT /define_index
{"settings": {"analysis": {"analyzer": {"define_analyzer": {"type": "standard","stopwords": ["is", "or", "ds"]}}}}
}GET /define_index/_analyze
{"analyzer": "define_analyzer","text": ["FeeNIXee IanlXD DOc and is or ds"]
}

在这里插入图片描述


http://www.ppmy.cn/news/22659.html

相关文章

pkl文件读写

想要将拿到的数据做切片处理&#xff0c;但是每训练一次网络就需要切一次&#xff0c;这样的效率太低了&#xff0c;然后就想着先把切片后的数据存储起来&#xff0c;然后训练网络的时候直接调用就可以。学习了一下python的pkl文件的读写&#xff0c;记录下来&#xff0c;方便以…

html+css网页练习三

文章目录一、登录注册页面1、要求2、效果图3、index.html4、style.css二、发展历程页面1、要求2、效果图3、index.html4、style.css三、Web技术社区页面1、要求2、效果图3、index.html4、style.css四、电商网站注册、登录页面1、要求2、效果图3、index.html4、style.css素材在我…

Ubuntu中安装TensorFlow-GPU【CUDA版本要和TensorFlow对应,否则一直False】

原来一直用pytorch&#xff0c;今天需要使用TensorFlow&#xff0c;结果死活装不上GPU版本&#xff0c;我无语了 查看是否可以使用TensorFlow-GPU&#xff1a; import tensorflow as tf # import tensorflow.compat.v1 as tf# print(tf.__version__) print(tf.test.is_gpu_ava…

MQ如何保证消息不丢失?

1.mq原则 MQ传输过程中&#xff0c;消息数据不能多&#xff0c;也不能少&#xff0c;不能多是说消息不能重复消费&#xff0c;这个我们下一章解决&#xff1b;不能少&#xff0c;就是说不能丢失数据。如果mq传递的是非常核心的消息&#xff0c;支撑核心的业务&#xff0c;那么这…

openCL笔记【更新中】

文章目录概述OpenCL标准平台模型执行模型Quick Start1. 搜索并选择OpenCL平台2. 获得OpenCL设备&#xff1b;opencl 设备类型3. 创建上下文两个函数用于创建上下文OpenCL命令队列4. 程序对象创建内核对象创建内存对象使用内存对象对内核对象进行参数传递获取结果5. 资源回收Ope…

微信小程序--》从零实现小程序项目案例

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;微信小程序 &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&…

ROS消息自定义、调用及问题解决

1、自定义话题信息 1、创建工作空间及功能包 mkdir catkin_ws cd src catkin_create_pkg test_msgs roscpp rospy std_msgs2、创建msg文件夹及文件 cd test_msgs mkdir msg cd msg vim test.msg3、添加内容 eg: string name float32 percent uint32 time4、修改pcckage中的…

【Linux】线程安全(万字详解)

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…