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.hqwc.cn/news/454980.html

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

相关文章

go test单元测试详解

目录 介绍&测试范围 测试函数 执行机制 常用执行模式 子测试 帮助函数Helper() 测试覆盖率 介绍&测试范围 go test测试是go自带的测试工具&#xff0c;主要包括单元测试和性能测试两大类。 包括了工程目录下所有以_test.go为后缀名的源代码文件&#xff0c;这…

【Lammps】Zhou势函数拟合(python程序)

【Lammps】Zhou势函数拟合&#xff08;python程序&#xff09; Zhou合金势主要用于金属的分子动力学模拟 &#xff0c;下面将主要对lammps自带程序生成相关合金势函数。 早期的Zhou势用Fortran编写&#xff0c;在使用之前需要进行对源代码进行编译&#xff0c;操作较为麻烦&am…

物联网ARM开发-STM32之RTC浅谈

RTC 一.RTC简单介绍 RTC好比我们用来记录时间的一个钟表&#xff0c;他里面有年月日&#xff0c;还可以记录星期&#xff0c;小时&#xff0c;分钟等。是Real Time Clock的缩写&#xff0c;译为实时时钟&#xff0c;本质上是一个独立的定时器。 1. 1 与通用定时器的区别 可以…

jenkins 发布远程服务器并部署项目

安装参考另一个文章 配置maven 和 jdk 和 git 注意jdk的安装目录&#xff0c;是jenkins 安装所在服务器的jdk目录 注意maven的目录 是jenkins 安装所在服务器的maven目录 注意git的目录 是jenkins 安装所在服务器的 git 目录 安装 Publish Over SSH 插件 配置远程服务器 创…

Python 实现 五子棋小游戏【附源码】

引言 五子棋是一种古老而深受欢迎的策略游戏&#xff0c;它具有简单的规则和无穷的变化。作为一种传统的中国棋类游戏&#xff0c;五子棋已经在世界范围内流行起来&#xff0c;并成为智力挑战和休闲娱乐的优秀选择。 规则和玩法&#xff1a; 五子棋使用一个15x15的棋盘&#x…

【RK3288 Android6 T8, 突然无声音问题排查】

文章目录 【RK3288 Android6 T8&#xff0c; 突然无声音问题排查】问题描述问题调查patch 【RK3288 Android6 T8&#xff0c; 突然无声音问题排查】 问题描述 页面上方突然出现音量进度条&#xff0c;小铃铛图标显示静音状态&#xff0c;不再播报语音 手动去安卓设置内查看&a…

【el-tree 文字过长处理方案】

文字过长处理方案 一、示例代码二、关键代码三、效果图 一、示例代码 <divstyle"height: 600px;overflow: auto"class"text item"><el-treeref"tree":data"treeData":props"defaultProps"class"filter-tree&…

活字格V9 嵌入的html与活字格页面数据交互

不想看分析请直接跳到解决方案 项目场景&#xff1a; 活字格V9 嵌入的html与活字格页面的数据交互&#xff08;传值&#xff09;&#xff0c;嵌入的html用了WebSocket来控制硬件&#xff0c;获取的数据无法回传到活字格页面上&#xff0c;且嵌入的html无法使用活字格内置的js及…

Oracle数据表ID自增操作

一、Oracle ID自增长功能介绍 Oracle数据库默认不支持像 SQLServer、MySQL中的自增长&#xff08;auto increment&#xff09;功能&#xff0c;即自动为每一行记录的自增长字段生成下一个值。 二、Oracle ID自增长方法 第一种&#xff0c;通过序列&#xff08;sequence&#…

c++之说_10|自定义类型 union 联合体

之前我们说了一些 struct 结构体 现在来了解新的自定义类型 union 联合体 语法 union ptr {void* fptr;CLassFunPtr p;FunPtr p2;ptr& operator(CLassFunPtr ptr){p ptr;return *this;}ptr& operator(FunPtr Fptr){p2 Fptr;return *this;} } FunPtr_; 我们看到了…

【技能树学习】Git入门——练习题解析

前言 本篇文章给出了Git入门技能树中部分的练习题解析&#xff0c;包括分支管理&#xff0c;Git标签&#xff0c;在Mac和Windows上使用GitVSCode的步骤。强调了git cherry-pick不直接支持从标签中选择提交&#xff0c;git tag -d只能删除本地标签&#xff0c;Mac系统的终端可以…

【产品升级】SmartPipe升级到版本2.0

在近一个月的攻关和测试下&#xff0c;SmartPipe软件轴线自动识别算法的性能大幅提升&#xff0c;鲁棒性和稳定性进一步增强。近一年来客户累计反馈的多种复杂管路&#xff08;包括带有支管管路、带有压瘪段管路、推弯管、装配管、带有复杂孔洞管路等&#xff09;现在均能够正确…