自定义ES分词器

1 分词器的组成

ES的分词器主要由三部分组成:

(1)原始文本处理-charactor filters

对原始文本进行处理。

(2)切词-tokenizer

按照规则进行切词。

(3)单词处理-token filters

将切词获取的单词进行加工。如大小写转化,删除stopwords,增加同义词等。

2 自定义分词

下面是一个自定义分词器的案例,自定义分词器的以上三部分内容。

# custom_analyzer - 自定义分词器的名称
# char_filter - 原始文本预处理
# tokenizer - 按照指定的规则切词
# filter - 将切词后的结果进行加工# _english_ 英文停用词,如 a,an,thePUT /test_analyzer_index_001
{"settings": {"analysis": {"analyzer": {"custom_analyzer":{ "type":"custom", "char_filter":["emoticons"],"tokenizer": "threeVerticalLine","filter":["english_stop"]}},"char_filter": {"emoticons":{ "type" : "mapping","mappings" : [":) => _happy_",":( => _sad_"]}},"tokenizer": {"threeVerticalLine":{"type":"pattern","pattern":"(\\|\\|\\|)"}},"filter": {"english_stop":{"type":"stop","stopwords":"_english_"}}}},"mappings": {"dynamic": "strict","properties": {"remark": {"type": "text","analyzer": "custom_analyzer","search_analyzer": "custom_analyzer"}}}
}

analyzer 用于指定对插入ES中的数据使用的分词器

search_analyzer 用于指定查询入参使用的分词器

3 测试分词效果

3.1 测试分词

POST test_analyzer_index_001/_analyze
{"analyzer": "custom_analyzer","text": "进口药品|注册证H20130650|||进口药品注册证h20130650|||h20130650_haha_a_the|||tom :)|||jack :(|||a|||an|||the"
}或者
POST test_analyzer_index_001/_analyze
{"field":"remark","text": "进口药品|注册证H20130650|||进口药品注册证h20130650|||h20130650_haha_a_the|||tom :)|||jack :(|||a|||an|||the"
}

分词结果如下所示。

{"tokens" : [{"token" : "进口药品|注册证H20130650","start_offset" : 0,"end_offset" : 17,"type" : "word","position" : 0},{"token" : "进口药品注册证h20130650","start_offset" : 20,"end_offset" : 36,"type" : "word","position" : 1},{"token" : "h20130650_haha_a_the","start_offset" : 39,"end_offset" : 59,"type" : "word","position" : 2},{"token" : "tom _happy_","start_offset" : 62,"end_offset" : 68,"type" : "word","position" : 3},{"token" : "jack _sad_","start_offset" : 71,"end_offset" : 78,"type" : "word","position" : 4}]
}

由结果可知,分词时,先按照emoticons规则进行了原始文本处理,然后根据threeVerticalLine规则进行分词(即使用"|||"分词),最后根据english_stop规则对英文停用词进行去除。

3.2 测试查询

下面来测试下查询效果。

3.2.1 插入数据

PUT /test_analyzer_index_001/_doc/1
{"remark": "进口药品|注册证H20130650|||进口药品注册证h20130650|||h20130650_haha_a_the|||tom :)|||jack :(|||a|||an|||the"
}

3.2.2 查询所有数据

GET /test_analyzer_index_001/_search
{"query": {"match_all": {}}
}

结果如下

{"hits" : [{"_index" : "test_analyzer_index_001","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"remark" : "进口药品|注册证H20130650|||进口药品注册证h20130650|||h20130650_haha_a_the|||tom :)|||jack :(|||a|||an|||the"}}]}
}

3.2.3 term查询

term 查询对输入不做分词,会将输入作为一个整体,到倒排索引中查找准确的词项。

(1)场景1-可召回插入的数据

GET /test_analyzer_index_001/_search
{"query": {"term": {"remark": "进口药品注册证h20130650"}}
}

(2)场景2-查询结果为空

以下查询结果为空,因为”进口药品|注册证H20130650|||进口药品注册证h20130650|||h20130650_haha_a_the|||tom :)|||jack :(|||a|||an|||the“在新增ES倒排索引时会进行分词,将”tom :)“转化为了”tom _happy_“,因此在倒排索引中存储的值为分词后的值:”tom _happy_“,因此使用”tom :)“查询不到数据。

GET /test_analyzer_index_001/_search
{"query": {"term": {"remark": "tom :)"}}
}

3.2.4 match查询

match 查询对输入的查询条件进行分词,生成一个供查询的词项列表,然后每个词项逐个进行底层的查询,最终将结果进行合并。

(1)场景1-可召回插入的数据

分词后的入参为 ”进口药品|注册证H20130650“、”tom _happy_“ 和 ”jack _sad_“。

GET /test_analyzer_index_001/_search
{"query": {"match": {"remark": "进口药品|注册证H20130650|||tom :)|||jack :("}}
}

(2)场景2-可召回插入的数据

分词后的入参为”tom _happy_“ 。

GET /test_analyzer_index_001/_search
{"query": {"match": {"remark": "tom :)"}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure基础详解二十二:随机点名效果

效果演示 组件 建立一个【中继器】,内部插入一个“文本框”。【中继器】每页项目数为1,开始页为1。 设置交互 页面载入时交互 给【中继器】新曾行,“name”数据列添加10行数据,填入相应的名字;“shunxu”数据列全部…

C#与c++对应的类型 转载

//C#调用C++的DLL搜集整理的所有数据类型转换方式-转载 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byte(unsigned char) ---- c#:System.Byte //c++:SHORT(short) ---- c#:System.Int16 //c++:WORD(unsigned short) ---- c#:System.UInt16 //c++:INT(int) ---- c#:Sys…

黑马程序员微服务 分布式搜索引擎3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售…

vue3.0中实现excel文件的预览

最近开发了一个需求,要求实现预览图片、pdf、excel、word、txt等格式的文件; 每种格式的文件想要实现预览的效果需要使用对应的插件,如果要实现excel格式文件的预览,要用到哪种插件呢? 答案:xlsx.full.min…

Java项目实战《苍穹外卖》 一、项目概述

人道洛阳花似锦,偏我来时不逢春。 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目,作为业余练手用,需要源码或者课程的可以找我,无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战《苍穹外卖》 二、项目搭建 …

计算机硬件组成部分

目录 中央处理器 控制器 运算器 存储器 输入输出设备 总线 硬件通常是指构成计算机的设备实体。一台计算机的硬件系统应由五个基本部分组成:运算器、控制器、存储器、输入和输出设备。现代计算机还包括中央处理器和总线设备。这五大部分通过系统总线完成指令所…

电子学会2023年06月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(一级) 一、单选题(共25题,共50分) 1. 看图找规律,请问下图红框中是?( ) A.

install YAPI MongoDB 备份mongo 安装yapi插件cross-request 笔记

登录容器 docker exec -it mongodb bash 登录mongo mongo -u root -p 123456 查看db show dbs 查看collection show collections 进入db use yapi 查看数据 db.<collection_name>.find() 带条件查看 db.<collection_name>.find({ <field>: <value>…

git使用patch进行补丁操作

文章目录 前言一、format-patch/am生成和应用补丁1、生成2、应用 二、patch文件解读 前言 在软件开发中&#xff0c;代码协作和版本管理是至关重要的。Git 是一个流行的分布式版本控制系统&#xff0c;它提供了各种功能来简化团队合作和代码管理。但是如何给已有项目打补丁&am…

Kafka学习笔记(三)

目录 第5章 Kafka监控&#xff08;Kafka Eagle&#xff09;5.2 修改kafka启动命令5.2 上传压缩包5.3 解压到本地5.4 进入刚才解压的目录5.5 将kafka-eagle-web-1.3.7-bin.tar.gz解压至/opt/module5.6 修改名称5.7 给启动文件执行权限5.8 修改配置文件5.9 添加环境变量5.10 启动…

【uniapp】Google Maps

话不多说 直接上干货 提前申请谷歌地图账号一、新建地图 使用h5获取当前定位或者使用三方uniapp插件 var coords ""navigator.geolocation.getCurrentPosition(function(position) {coords {lat: position.coords.latitude,lng: position.coords.longitude};lats …

【带宽、主频、位宽、数据传输速率】DDR带宽怎么计算?

文章目录 1. 如何计算DDR带宽2. DDR data rate和DDR主频3. Mbps和Mhz4. 出题 1. 如何计算DDR带宽 计算DDR理论带宽的公式为&#xff1a; DDR主频 * 位宽 理论带宽其中&#xff0c;位宽(bit width)指的是内存总线的位宽&#xff0c;例如64位、128位、16bit、32bit等&#xff…

Objectarx 使用libcurl请求WebApi

因为开发cad需要请求服务器的数据&#xff0c;再次之前我在服务器搭设了webapi用户传递数据&#xff0c;所以安装了libcurl在objectarx中使用数据。 Open VS2012 x64 Native Tools Command Prompt补充地址&#xff1a; 我在此将相关的引用配置图片&#xff0c;cad里面的应用和…

EtherCAT 伺服控制功能块实现

EtherCAT 是运动控制领域主要的通信协议&#xff0c;开源EtherCAT 主站协议栈 IgH 和SOEM 两个项目&#xff0c;IgH 相对更普及一些&#xff0c;但是它是基于Linux 内核的方式&#xff0c;比SOEM更复杂一些。使用IgH 协议栈编写一个应用程序&#xff0c;控制EtherCAT 伺服电机驱…

酷柚易汛ERP - 权限设置操作指南

1、产品介绍 对系统的同事管理、角色管理、数据授权进行设置 1.1 同事管理 对当前系统添加同事账号&#xff0c;超级管理员不允许删除 1.2 角色管理 对当前系统添加角色&#xff0c;系统中可以设置多种角色&#xff0c;不同角色设置不同权限&#xff0c;方便添加同事时进行…

Notepad+正则表达式使用方法

常用的元字符和语法规则来构建你的表达式&#xff1a; 正则表达式知识准备 字符匹配&#xff1a; \d&#xff1a;匹配任意数字。\w&#xff1a;匹配任意字母、数字或下划线。\s&#xff1a;匹配任意空白字符&#xff08;空格、制表符等&#xff09;。.&#xff1a;匹配除换行…

代码随想录算法训练营第五十八天丨 动态规划part18

739. 每日温度 思路 首先想到的当然是暴力解法&#xff0c;两层for循环&#xff0c;把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢&#xff1f; 通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边…

机器视觉选型-什么时候用远心镜头

物体厚 当被检测物体厚度较大&#xff0c;需要检测不止一个平面时&#xff0c;典型应用如食品盒&#xff0c;饮料瓶等。 物体位置变化 当被测物体的摆放位置不确定&#xff0c;可能跟镜头成一定角度时。 物体上下跳动 当被测物体在被检测过程中上下跳动&#xff0c;如生产线上下…

人工智能基础_机器学习040_Sigmoid函数详解_单位阶跃函数与对数几率函数_伯努利分布---人工智能工作笔记0080

然后我们再来详细说一下Sigmoid函数,上面的函数的公式 我们要知道这里的,Sigmoid函数的意义,这逻辑斯蒂回归的意义就是,在多元线性回归的基础上,把 多元线性回归的结果,缩放到0到1之间对吧,根据中间的0.5为分类,小于0.5的一类,大于的一类, 这里的h theta(x) 就是概率函数 然…

婴儿沐浴座椅上架亚马逊美国站安全标准要求ASTM F1967-19测试,CPC认证

亚马逊婴儿沐浴座椅产品认证 在亚马逊上架的婴儿沐浴座椅产品&#xff0c;亚马逊会要求店家上传相关的产品测试报告&#xff0c;若被抽查到没有相关认证的产品将面临产品被下架或罚款等处罚&#xff01; 婴儿沐浴座椅产品示例&#xff1a; 婴儿沐浴座椅是一种用于浴缸、盥洗盆…