07、全文检索 -- Solr -- Solr 全文检索 之 为索引库添加中文分词器

目录

  • Solr 全文检索 之 为索引库添加中文分词器
    • 添加中文分词器
      • 1、添加中文分词器的 jar 包
      • 2、修改 managed-schema 配置文件
        • 什么是 fieldType
      • 3、添加 停用词文档
      • 4、重启 solr
      • 5、添加【*_cn】动态字段,并为该字段设置中文分词器
      • 6、演示分词器的区别
        • 演示 text_cjk 这个简单的分词器
        • 演示 text_cn 这个中文分词器

Solr 全文检索 之 为索引库添加中文分词器

添加中文分词器


1、添加中文分词器的 jar 包


将 Solr 的 contrib\analysis-extras\lucene-libs 文件夹
目录下的 lucene-analyzers-smartcn-x.x.x.jar 包
复制到 Solr的 server\solr-webapp\webapp\WEB-INF\lib 目录下。

如果要添加第三方中文分词器,只要同样将JAR包复制到WEB-INF\lib目录下。

在这里插入图片描述


2、修改 managed-schema 配置文件

设置使用中文分词器的Field类型(修改这个 managed-schema 文件 ):


在配置文件里面添加这个中文分词器:

text_cn (中文分词器) 其实只是一个字段类型而已,因为实现了 HMMChineseTokenizerFactory 这个中文分词器的功能,所以也可以说 text_cn 是一个中文分词器。
在这里插入图片描述


  <!-- 设置中文分词器 --><fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"><analyzer><!-- HMMChineseTokenizerFactory 是一个中文分词器   --><tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/><!-- 过滤英文大小写,就是保存关键字的时候不区分大小写,统统把关键字都弄成小写再保存 --><filter class="solr.LowerCaseFilterFactory"/><!-- 添加停用词文档,用于过滤停用词 --><!-- 停用词列表在 words 属性中指定,并且忽略大小写(ignoreCase="true"--><filter class="solr.StopFilterFactory" words="lang/stopwords_cn.txt" ignoreCase="true"/><!-- 这个是词干化,用于对英语文本进行词干提取。它基于 Porter 算法,可以将英语单词转换为其基本形式(词干 --><filter class="solr.PorterStemFilterFactory"/></analyzer></fieldType>


如图: 图形管理界面的这些字段类型,就对应着 managed-schema 配置文件里面的 fieldType
不同的一些字段类型,在 managed-schema 配置文件里面,就实现了针对不同语言的分词器功能。
比如上面的 text_cn 的解释。


在这里插入图片描述


什么是 fieldType

在 Solr 中,fieldType 是一种抽象类别,用于定义字段的类型和属性。每个 fieldType 包含了一组分析器、过滤器和标记化器,用于处理特定类型的文本。

在 managed-schema 配置文件中,我们通常会定义多个 fieldType,以便为不同类型的字段设置不同的分析器和过滤器。

在这里插入图片描述


3、添加 停用词文档

在conf/lang下添加中文的停用词列表文档。然后重启Solr

上面第二步的配置中,配置了这个【 words="lang/stopwords_cn.txt 】中文的停用词文档,但是此时还没有这个文档,所以需要我们自己添加

在这里插入图片描述


随便拷贝一份日文的停用词文档,重命名改成中文的就行

在这里插入图片描述


然后把日文的删掉,改成中文的就可以了,此时就有了一个 stopwords_cn.txt 的中文停用词文档

在这里插入图片描述


4、重启 solr

重启下,重启需要指定端口号

solr restart -p 8983

重启失败,因为字符集的原因,所以我把配置文件里面的中文注释给删除掉了,然后再重启就成功了。

在这里插入图片描述


如图:出现了 text_cn 这个 FieldType 字段类型

在这里插入图片描述


5、添加【*_cn】动态字段,并为该字段设置中文分词器


添加动态字段,可以在图形化界面添加,也可以直接在 managed-schema 配置文件里面添加,但是在配置文件里面添加的话,需要重启 solr 。


在图形界面添加动态字段,并为该字段设置中文分词器

1、如图:添加一个 【*_cn】 的动态字段,只要后缀是 _cn 结尾的,就可以匹配到。

然后将 Field 的类型设为【使用了中文分词器功能的字段类型(text_cn)】即可。

在这里插入图片描述


2、成功创建这个动态字段。

在这里插入图片描述



如图:也可以在配置文件里面,把这些字段的类型都修改成 text_cn ,那么在查询关键字的时候,对后缀有“_cn”的这些字段,就会使用到中文分词器来分词。

如果在配置文件里面进行内容修改,那么需要重启 solr 。

在这里插入图片描述



解释下这个 动态字段 “*_cn” 和 text_cn 字段类型 的关系

在这里插入图片描述


“*_cn” 和 text_cn 的关系

“*_cn” 是 Solr 的动态字段命名模式之一,用于指定中文文本字段。
而 “text_cn” 是 Solr 预定义的一个字段类型,用于描述中文文本的分析器和过滤器。

在这里插入图片描述


6、演示分词器的区别


演示 text_cjk 这个简单的分词器

text_cjk 是一个简单的单词分词器。

text_cjk 是 Solr 中的一种 FieldType,用于处理包含中文、日文和韩文字符的文本字段。

在这里插入图片描述


这个分词器的效果如图:

输入【七龙珠是一部很好看的动漫】

在这里插入图片描述



演示 text_cn 这个中文分词器

因为 text_cn 这个字段类型,使用了 HMMChineseTokenizerFactory 这个智能的中文分词器,所以可以对中文文档进行分词

如图:真正按照汉语的语言习惯来进行分词,建立索引库


在这里插入图片描述




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

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

相关文章

瑞_23种设计模式_建造者模式

文章目录 1 建造者模式&#xff08;Builder Pattern&#xff09;1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …

scikit-learn 1.3.X 版本 bug - F1 分数计算错误

如果您正在使用 scikit-learn 1.3.X 版本&#xff0c;在使用 f1_score() 或 classification_report() 函数时&#xff0c;如果参数设置为 zero_division1.0 或 zero_divisionnp.nan&#xff0c;那么函数的输出结果可能会出错。错误的范围可能高达 100%&#xff0c;具体取决于数…

STM32单片机的C语言基础

C语言是单片机开发中的必备基础知识&#xff0c;本文列举了部分STM32学习中比较常见的一些C语言基础知识。 1 位操作 下面我们先讲解几种位操作符&#xff0c;然后讲解位操作使用技巧。C语言支持以下六种位操作&#xff1a; 下面&#xff0c;重点讲解一下位操作在单片机开发中…

通过servlet设计一个博客系统

博客系统 准备工作servlrt依赖mysql依赖jackson依赖 服务器和数据库的交互设计数据库/数据表封装DBUtil,实现建立连接和断开连接创建实体类bloguser 编写Dao类BlogDaoUserDao 前端和服务器的交互功能一:博客列表页约定格式后端代码前端代码 功能二:实现博客详情页约定格式后端代…

sql相关子查询

1.什么是相关子查询 相关子查询是一个嵌套在外部查询中的查询&#xff0c;它使用了外部查询的某些值。每当外部查询处理一行数据时&#xff0c;相关子查询就会针对那行数据执行一次&#xff0c;因此它的结果可以依赖于外部查询中正在处理的行。 2.为什么要使用相关子…

Python 数据可视化:配色方案

1、引言 在这篇文章中&#xff0c;我们将研究Python的一些配色方案&#xff0c;主要是Seaborn库。这将采用 Python Notebook 格式&#xff0c;其中包括绘图的代码。 2、实验数据 首先导入必要的库&#xff1a; import pandas as pd import seaborn as sns import matplotlib…

unordered_map和unordered_set

目录 一、unordered_map 1.1、unordered_map的特点 1.2、unordered_map和map的区别 二、unordered_set 2.1、unordered_set的特点 2.2、unordered_set和set的区别 三、哈系桶的改造 3.1 结构设置 3.2 构造函数和析构函数 3.3 数据插入 3.4 数据查找 3.5 数据删除 …

STM32学习笔记三——深度讲解GPIO及其应用

目录 STM32GPIO端口位基本结构图&#xff1a; 结构图I/O引脚&#xff1a; GPIO输入输出总结 1.GPIO引脚的四种输入方式及其特点&#xff1a; 1)上拉输入(GPIO_Mode_IPU) 2)下拉输入(GPIO_Mode_IPD) 3)模拟输入(GPIO_Mode_AIN) 4)浮空输入(GPIO_Mode_IN_FLOATING…

【git】本地项目推送到github、合并分支的使用

1. github上创建仓库信息 点击个人头像&#xff0c;选择【你的仓库】 点击【新增】 填写仓库信息 2. 本地项目执行的操作 1.生成本地的git管理 (会生成一个.git的文件夹) git init 2.正常提交到暂存区&#xff0c;并填写提交消息 git add . git commit -m "init…

彻底学会系列:一、机器学习之线性回归

1.基本概念 线性回归&#xff1a; 有监督学习的一种算法。主要关注多个因变量和一个目标变量之间的关系。 因变量&#xff1a; 影响目标变量的因素&#xff1a; X 1 , X 2 . . . X_1, X_2... X1​,X2​... &#xff0c;连续值或离散值。 目标变量&#xff1a; 需要预测的值: t…

Openresty+Lua+Redis实现高性能缓存

一、背景 当我们的程序需要提供较高的并发访问时&#xff0c;往往需要在程序中引入缓存技术&#xff0c;通常都是使用Redis作为缓存&#xff0c;但是要再更进一步提升性能的话&#xff0c;就需要尽可能的减少请求的链路长度&#xff0c;比如可以将访问Redis缓存从Tomcat服务器…

MQ面试题整理(持续更新)

1. MQ的优缺点 优点&#xff1a;解耦&#xff0c;异步&#xff0c;削峰 缺点&#xff1a; 系统可用性降低 系统引入的外部依赖越多&#xff0c;越容易挂掉。万一 MQ 挂了&#xff0c;MQ 一挂&#xff0c;整套系统崩 溃&#xff0c;你不就完了&#xff1f;系统复杂度提高 硬生…

ES高可用架构涉及常用功能整理

ES高可用架构涉及常用功能整理 1. es的高可用系统架构和相关组件2. es的核心参数2.1 常规配置2.2 特殊优化配置2.2.1 数据分片按ip打散2.2.2 数据分片机架感知2.2.3 强制要求数据分片机架感知2.2.4 写入线程池优化2.2.5 分片balance优化2.2.6 限流控制器优化 3. es常用命令3.1 …

前缀和 acwing

思路&#xff1a;两个数组&#xff0c;一个数组用来保存数据&#xff0c;一个数组来求对应项的和 前缀和S[r]-s[r-1] 空出来下标0 从1开始 方便表示&#xff0c;防止越界 c代码实现: #include<iostream> using namespace std; const int N1000000; int a[N],s[N]; …

344. Reverse String(反转字符串)

题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 问题分析 以中间字符为轴&#xff0c;将两边的字符对换…

CSS-IN-JS

CSS-IN-JS 为什么会有CSS-IN-JS CSS-IN-JS是web项目中将CSS代码捆绑在JavaScript代码中的解决方案。 这种方案旨在解决CSS的局限性&#xff0c;例如缺乏动态功能&#xff0c;作用域和可移植性。 CSS-IN-JS介绍 1&#xff1a;CSS-IN-JS方案的优点&#xff1a; 让css代码拥…

Java与SpringBoot:实现高效车险理赔信息管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…

【Elasticsearch】从入门到精通

目前java常见的针对大数据存储的方案并不多&#xff0c;常见的就是mysql的分库分表、es存储 这里偏向es存储方案&#xff0c;es不同的版本之间其实差异还挺大的&#xff0c;本篇博文版本Elasticsearch 7.14.0 Springboot整合Easy-Es Easy-Es官方文档 Elasticsearch的初步认识 …

机器翻译后的美赛论文怎么润色

美赛论文的语言表达一直是组委会看重的点&#xff0c;清晰的思路和地道的语言在评审中是重要的加分项。 今天我们就来讲讲美赛论文的语言问题。 我相信有相当一部分队伍在打美赛的时候&#xff0c;出于效率的考量&#xff0c;都会选择先写中文论文&#xff0c;再机翻成英文。 …