搜索引擎ES--IK分词器

article/2025/9/12 22:32:49

目录

集成IK分词器

扩展词典使用

停用词典使用

同义词典使用


集成IK分词器

        概要:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。新版本的IKAnalyzer3.0发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

3.0特性:

1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。

2)采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。

3)支持个人词条的优化的词典存储,更小的内存占用。

4)支持用户词典扩展定义。

5)针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。

IK分词器有两种分词模式:ik_max_word 和 ik_smart 模式。

1)ik_max_word(常用模式)

        将文本做最细粒度拆分

2)ik_smart

        将文本做最粗粒度拆分

使用 ik_max_word 结果:

 使用 ik_smart 结果

扩展词典使用

        扩展词的使用场景:就是不想让哪些词分开,例如:南京市长江大桥  使用 ik_max_wrod 分出来的 江大桥 并没有意义

通过使用 自定义扩展词库 来将不需要分的词进行处理

1).进入到ik分词器的安装目录下的config目录下,新增自定义词典

vim ext_dict.dic

输入:江大桥

2). 把自定义的扩展词文件添加到IKAnalyzer.cfg.xml中

vim IKAnalyzer.cfg.xml

3)重启Elasticsearch 

停用词典使用

        有些词在文本中出现的频率非常高,但对本文的语义产生不了多大的影响。例如英文的a、an、the、of等。或中文的”的、了、呢等”。这样的词称为停用词。停用词经常被过滤掉,不会被进行索引。在检索的过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。停用词可以加快索引的速度,减少索引库文件的大小

1)进入到ik分词器的安装目录下的config目录下, 新增自定义词典

 vim stop_dict.dic

输入

的 了 啊

2)将我们自定义的停用词典文件添加到IKAnalyzer.cfg.xml配置中

3)重启Elasticsearch

同义词典使用

        有很多相同意思的词,我们称之为同义词,比如“番茄”和“西红柿”,“馒头”和“馍”等。在搜索的时候,我们输入的可能是“番茄”,但是应该把含有“西红柿”的数据一起查询出来,这种情况叫做同义词查询。

注意:扩展词和停用词是在索引的时候使用,而同义词是检索时候使用。 

配置IK同义词
        Elasticsearch 自带一个名为 synonym 的同义词 filter。为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizersynonym 做 filter。听上去很复杂,实际上要做的只是加一段配置。

1)创建/config/analysis-ik/synonym.txt 文件,输入一些同义词并存为 utf-8 格式。例如 

 china,中国

2)创建索引时,使用同义词配置,示例模板如下 

PUT /ik_index
{"settings": {"analysis": {"filter": {"word_sync": {"type": "synonym","synonyms_path": "analysis-ik/synonym.txt"}},"analyzer": {"ik_sync_max_word": {"filter": ["word_sync"],"type": "custom","tokenizer": "ik_max_word"},"ik_sync_smart": {"filter": ["word_sync"],"type": "custom","tokenizer": "ik_smart"}}}},"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_sync_smart","search_analyzer": "ik_sync_smart"}}}
}

        以上配置定义了 ik_sync_max_word 和 ik_sync_smart 这两个新的 analyzer,对应 IK 的 ik_max_word 和 ik_smart 两种分词策略。ik_sync_max_word 和 ik_sync_smart 都会使用 synonym filter 实现同义词转换


3)到此,索引创建模板中同义词配置完成,搜索时指定分词为 ik_sync_max_word ik_sync_smart

案例:

PUT /duia-es-synonym
{"settings": {"analysis": {"filter": {"word_sync": {"type": "synonym","synonyms_path": "analysis-ik/synonym.txt"}},"analyzer": {"ik_sync_max_word": {"filter": ["word_sync"],"type": "custom","tokenizer": "ik_max_word"},"ik_sync_smart": {"filter": ["word_sync"],"type": "custom","tokenizer": "ik_smart"}}}},"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_sync_max_word","search_analyzer": "ik_sync_max_word"}}}
}

插入一条数据

POST /duia-es-synonym/_doc/1
{"name": "对啊网是中国专业的学习平台"
}

使用同义词“china”进行搜索


http://chatgpt.dhexx.cn/article/ldjgdepm.shtml

相关文章

搜索引擎介绍

自从1994年问世以来,搜索引擎逐渐成为了人们获取Internet信息资源的主要方式,相关搜索引擎网站也逐渐成为Web用户使用Internet时的首选访问站点之一,另外搜索引擎和实时通讯、电子邮件等服务已经成为当今各大门户网站用来吸引用户访问的三大主…

69个网盘搜索引擎资源(最全)

呵呵,今天博主今天整理了一个下午,把网上的能找到69个网盘搜索引擎都放在这了,希望能帮到有需要的小伙伴!!! 1、盘多多: http://www.panduoduo.net 2、Bdsola:http://www.3134.c …

微信支付之Native支付和JSAPI支付详细开发步骤!

目录标题 微信支付之扫码Native支付与JSAPI支付进入主题一、Native支付1. 使用场景2. 开发步骤3. 开始开发 二、JSAPI支付1. 使用场景2. 开发步骤3. 开始开发 微信支付之扫码Native支付与JSAPI支付 在电商网站开发中,我们必不可少的功能环节就是“支付”了&#xff…

微信JSAPI支付对接流程及支付接口设计

文章目录 前言一、JSAPI支付场景及逻辑二、开发步骤1.设置支付目录2.设置授权域名3.业务流程 三、代码设计1. 支付页面2. Controller3. JS调起支付4. 工具类 前言 关于微信支付很早之前做过一次,近期项目再次使用就简单的记录一下。微信公众账号开通及微信支付认证…

【微信支付】jsApi支付 V3版本(附代码)

1、接入前的准备 官方文档地址 jsapi下单官方文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml jsapi调起支付官方文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml jsapi支付通知回调文档地址…

JAVA版微信支付V3—JSAPI支付

本人用的开发框架是:struts2(用了struts2的0配置,对于struts的0配置不熟悉的可以看看这个博客了解下 http://www.cnblogs.com/fpjason/archive/2009/08/01/1536671.html) 本人做的是微信V3版本的微信支付,也是目前最新的微信支付…

PHP微信支付JSAPI网页支付Native原生支付

微信JsApi网页支付链接(微信中打开):微信安全支付 微信Native原生支付产生二维码链接:微信扫描支付样例 资源下载路径:PHP实现微信支付,支付宝支付对接_支付对接如何设置-PHP文档类资源-CSDN下载 使用PHP…

PHP实现微信支付(jsapi支付)流程

最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路。 前期准备: 1.微信认证…

【微信公众号】微信 jsapi 支付大概流程

文章目录 一、个人对微信 jsapi 支付的介绍二、微信支付需要的数据库表(例子)1. 订单表2. 支付信息表3. 退款信息表 三、微信支付必须的参数(配置文件)四、WxPayConfig.java1. MAVEN 依赖2. Java 代码(商户私钥、签名验…

微信小程序支付V2版之JSAPI支付

文章目录 一、微信支付环境搭建1 企业微信小程序的开通2. 企业商户号的开通3 小程序号与商户号关联 二、微信小程序的支付流程1 JSAPI支付流程2 微信小程序获取openid3 微信小程序下单4 后台服务程序对订单的处理5 微信小程序发起支付6 支付结果的通知 三、微信支付API的使用1 …

Java实现微信支付(微信公众号JSAPI支付)

Java实现微信支付(微信公众号JSAPI支付) 第一步 开发环境准备 在接入微信支付之前,需要现在微信支付商户平台入驻,成为商家,才能继续后续的开发。 微信支付商户平台网址:https://pay.weixin.qq.com不过&…

微信 JSAPI 支付流程

微信支付分为5种: Jsapi支付,二维码支付,H5支付,小程序支付,App支付 Jsapi支付流程: (1) 通过oauth协议获取open_id a.第一步:用户同意授权,获取code 在确保微信公众账号拥有授权…

微信小程序微信支付《JSAPI支付》APIV3详细教程

文章目录 前提整体介绍我的maven依赖1、整体流程2、openid 的获取3、统一下单Controller(预支付订单)4、配置类和配置文件5、工具类6、前端接收到必要的参数,进行调起支付页面7、微信支付通知,notify_url的回调Controller8、前端小…

java对接微信支付:JSAPI支付(微信公众号支付)

本文是【微信JSAPI支付】文章,主要讲解商户对接微信支付,简洁版测试 文章目录 一、JSAPI支付接入前准备 二、代码片段 1.引入Maven依赖 2.后端业务请求接口 3.前端调起支付请求方法 总结 一、JSAPI支付接入前准备 1、JSAPI支付首先需要注册、认证一个公…

微信 JSAPI 支付流程

微信支付,开发文档地址: https://pay.weixin.qq.com/wiki/doc/api/index.html JSAPI支付文档地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter9_2 微信支付分为5种: Jsapi支付,二维码支付&#xf…

微信公众号支付(JSAPI)

六年代码两茫茫,不思量,自难忘 6年资深前端主管一枚,只分享技术干货,项目实战分享 关注博主不迷路~ 文章目录 JSAPI支付简介应用场景支付的对接准备工作开发流程必填参数预支付统一下单公众号授权获取用户信息微信支付&#xff08…

微信支付之JSAPI支付

首先看一下,微信支付关于jsapi的官方文档,相关接口,一共有下单,查询订单,关闭订单,调起jsapi支付,支付结果通知,申请退款,查询单笔退款,退款结果通知&#xf…

微信支付JSAPI

一、什么是JSAPI支付 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。 应用场景有: 线下场所:调用接口生成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付 公众号场景&…

微信支付之JSAPI支付开发流程

JSAPI支付 前言准备开发1.流程说明2.下单(预支付)3.前端调起支付4.支付结果异步通知5.退款申请6.退款结果异步通知 结语 前言 最近项目涉及到微信支付的功能,在这里简单分享下整体的开发流程,这里要介绍的是JSAPI支付。 JSAPI网页支付&#…

FME是一个好东东

FME产品分为三个层次: 一、入门级 1、特点:支持常见的GIS软件的数据交换,如 MapInfo TAB, DGN, DXF, DWG, SDTS, SHP, and TIGER;可以运行大部分函数(Funtion和Factory);不支持由Plug-in开发的第…