Solr学习总结 IK 配置中文分词器

Solr及Spring-Data-Solr入门学习 Solr的安装与配置 多数搜索引擎应用都必须具有某种搜索功能,而搜索功能往往大量的消耗资源导致应用程序运行缓慢。为此,出现了各种用于构建搜索的应用程序,我们要学习的solr正是其中的一款开源搜索平台。 Apache Solr 是建立在Lucene(全文搜索引擎)之上,帮助我从大量的数据中寻找所需信息。不仅限于搜索,Solr也可用于储存目的。像其他NoSQL数据库一样,它是一种非关系数据储存和处理技... 阅读详情

  默认solr没有使用中文分词器 所有搜索的词都是整个句子是一个词 需要配置中文分词器目前比较好用的是IK 但2012就停更了 只支持到Lucene4.7所有solr5.5需要Lucene5支持需要修改部分源代码来支持solr5.5找到IKAnalyze类 

<dependency>
	    <groupId>com.janeluo</groupId>
	    <artifactId>ikanalyzer</artifactId>
	    <version>2012_u6</version>
	</dependency>

因为IK分词器底层本来就是用lucene一些技术来实现的所以会给一些相关联的包给下载下来但Lucene4.7.2跟solr5版本差异非常大所以需要改写其中的一些类然后再重新打包

 

首先 先找到 IKAnalyzer这个类因为需要修改它的源代码所以要去模仿它(包名类名内容需一致) 由于java遵守就近原则 它就不会去加载jar包里的内容了会以当前类为主  本身的Ik是支持4.7.2的所以当前这个类也是能编译通过的

 

代码修改对应的方法即可

IKAnalyzer

/**
 
 *
 */
package org.wltea.analyzer.lucene;
 
import java.io.Reader;
 
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Tokenizer;
 
/**
 */
public final class IKAnalyzer extends Analyzer {
 
  private boolean useSmart;
 
  public boolean useSmart() {
    return useSmart;
  }
 
  public void setUseSmart(boolean useSmart) {
    this.useSmart = useSmart;
  }
 
  /**
 
   */
  public IKAnalyzer() {
    this(false);
  }
 
  /**
   */
  public IKAnalyzer(boolean useSmart) {
    super();
    this.useSmart = useSmart;
  }
 
  /**这里就去掉了 Reader的一个参数
   */
  @Override
  protected TokenStreamComponents createComponents(String fieldName) {
    Tokenizer _IKTokenizer = new IKTokenizer(this.useSmart());
    return new TokenStreamComponents(_IKTokenizer);
  }
 
}

IKTokenizer

/**
 * 
 */
package org.wltea.analyzer.lucene;
 
import java.io.IOException;
import java.io.Reader;
 
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
 
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
 
 
public final class IKTokenizer extends Tokenizer {
 
 
  private IKSegmenter _IKImplement;
 
 
  private final CharTermAttribute termAtt;
 
  private final OffsetAttribute offsetAtt;
 
  private final TypeAttribute typeAtt;
 
  private int endPosition;
 
  //去掉了其中Reader的第一个构造参数
  public IKTokenizer(boolean useSmart) {
    super();//去掉super中的构造参数
    offsetAtt = addAttribute(OffsetAttribute.class);
    termAtt = addAttribute(CharTermAttribute.class);
    typeAtt = addAttribute(TypeAttribute.class);
    _IKImplement = new IKSegmenter(input, useSmart);
  }
 
 
  @Override
  public boolean incrementToken() throws IOException {
 
    clearAttributes();
    Lexeme nextLexeme = _IKImplement.next();
    if (nextLexeme != null) {
 
      termAtt.append(nextLexeme.getLexemeText());
   
      termAtt.setLength(nextLexeme.getLength());
      
      offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());
   
      endPosition = nextLexeme.getEndPosition();
  
      typeAtt.setType(nextLexeme.getLexemeTypeString());
 
      return true;
    }
 
    return false;
  }
 
  /*
   * (non-Javadoc)
   * @see org.apache.lucene.analysis.Tokenizer#reset(java.io.Reader)
   */
  @Override
  public void reset() throws IOException {
    super.reset();
    _IKImplement.reset(input);
  }
 
  @Override
  public final void end() {
    // set final offset
    int finalOffset = correctOffset(this.endPosition);
    offsetAtt.setOffset(finalOffset, finalOffset);
  }
}

 

强制性的把依赖 换成自己需要的版本

剔除 

<dependencies>
 	<!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer -->
	<dependency>
	    <groupId>com.janeluo</groupId>
	    <artifactId>ikanalyzer</artifactId>
	    <version>2012_u6</version>
	    <!-- 剔除 -->
	    <exclusions>
	    	<exclusion>
		    <groupId>org.apache.lucene</groupId>
		    <artifactId>lucene-core</artifactId>
		</exclusion>
		<exclusion>  
			 <groupId>org.apache.lucene</groupId>
		    <artifactId>lucene-queryparser</artifactId>
	    </exclusion>
	   	<exclusion>  
			 <groupId>org.apache.lucene</groupId>
		    <artifactId>lucene-analyzers-common</artifactId>
		</exclusion>
	    </exclusions>
	</dependency>
    <!-- 替换成自己需要的版本 -->
	<dependency>
		<groupId>org.apache.lucene</groupId>
		<artifactId>lucene-core</artifactId>
		<version>5.5.5</version>
	</dependency>
	<dependency>
		<groupId>org.apache.lucene</groupId>
		<artifactId>lucene-queryparser</artifactId>
		<version>5.5.5</version>
	</dependency>
	<dependency>
		<groupId>org.apache.lucene</groupId>
		<artifactId>lucene-analyzers-common</artifactId>
		<version>5.5.5</version>
	</dependency>
  </dependencies>

这时候4.7.2就替换成5.5.5了

在文件夹中找到 ikanalyzer-2012_u6.jar

虽然修改了java项目但包里面的内容并没有修改所以需要把编译好的class文件替换原始jar  替换完成后就支持5.5版本了

将solrhome下 配置文件managed-schema 添加一个字段类型 使用ik分词器

<fieldType name="text_ik" class="solr.TextField" >
      <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
      <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
    </fieldType>

不能修改 StrField 不支持自定义分词器

<fieldType name="string" class="solr.StrField" sortMissingLast="true" >
</fieldType>

然后将对应需要进行中文分词的字段使用 text_ik该字段类型 比如

<dynamicField name="*_s"  type="text_ik"  indexed="true"  stored="true" />

重启 或者 cloud环境下重新生成collection 插入数据即可实现中文分词  通过某些中文关键字搜索

solr7.2环境搭建和配置ik中文分词器 因为准备使用最新的solr7.2,需要从solr4.10过度过来,然后就发现了7.2版本和4.10的版本的环境搭建方式有了比较大的变化,在这块也是经历了很多次失败,查询了很多的资料,最后终于完成了,然后就是希望能分享出来,其中发现的两个版本solr在搭建上的一些不同之处也是注释了出来,可能还有一些没有发现的地方。如果发现其中有错误的地方或者不妥之处还请告知于我。 首先需要的准备好jdk1.8和t 阅读详情

相关推荐

Solr 部署与 IK 中文分词器全攻略(企业级实操手册)

文件路径xml-- 数据目录,需提前创建 -->-- Servlet 规范强制要求,必须添加 -->严格按照 Solr 版本匹配 JDK 和 IK 分词器,通过官方工具验证兼容性,避免类冲突和启动错误。

专注于 Java 后端架构、微服务、分布式、前端及 AI 领域的技术分享,是开发者获取硬核知识、交流实战经验的专业博客。 1002

Solr配置完分词器后Analysis分词有效果,查询时分词无效果的解决

是因为在配置分词器前插入的数据已经创建了索引,这时候的索引是没走分词器便创建的,即历史数据是没有做过分词的。1.将你要分词的字段设置text_ik类型。2.删除索引重新创建或者更新索引。 我采用删除索引的方法~(暴力,简单干脆) 直接将solrhome中solr实例的data文件夹清空,重新录入数据,重新查询,完美解决。 ...

sout 1079

超实用!用ChimeraX对AlphaFold 结果可视化(中): 蛋白结构美化篇

而一般需要的背景颜色是无色(白色),有三种方法可以更改背景颜色,这里我们介绍两种方法,第三种在下一小节中讲解。如果想选中蛋白链中的某一结构区域或者某些位点,可以用Ctrl+Shift+鼠标左键,或在软件窗口中点击。在这个窗口中可以对蛋白的主链、侧链、表面等颜色进行修改,只用在。,即可在右下角看到我们蛋白的序列信息,在这里面直接用鼠标选择要选择的结构域。就会有更多的颜色供我们选择,如果有特定的色号还可以在这个界面继续选择。后面的颜色(②),就可以选择想要的任何背景颜色(③)。就可以选择软件推荐的常用颜色。

m0_63153079的博客 5483

lucene使用IKAnalyzer报错:java.lang.AbstractMethodError

自己使用的IK分词器是 上的,该网站只提供一个版本。maven配置 如下 org.apache.lucene lucene-core 3.6.2 com.janeluo ikanalyzer 2012_u6 程序使用该分词器时,报错: java.lang.AbstractMethodError 打开从仓库上下载的jar文件,发现,IK分词器所依

志远的博客 8174

Windows/Linux双平台指南:3种方法快速释放被占用的GPU内存(含任务管理器替代方案)

本文详细介绍了在Windows和Linux双平台下快速释放被占用GPU内存的3种方法,包括任务管理器替代方案。从基础操作到高阶技巧,帮助用户彻底解决GPU内存驻留问题,提升计算资源利用率。特别适用于深度学习开发者和服务器管理员处理显存泄漏等常见问题。

j0k1l2m3n的博客 262

从‘数字分身’到‘数字员工’:华为云MetaStudio如何重塑企业生产力?

本文探讨了华为云MetaStudio如何通过数字人技术重塑企业生产力,从数字分身到数字员工的转变。通过多模态AIGC技术,MetaStudio在金融、零售和制造业等多个行业实现高效应用,显著提升服务质量和运营效率。数字员工不仅降低成本,更成为企业增长的新引擎。

weixin_29083475的博客 450

使用elasticsearch英文不能拆的问题

比如name字段有zhangsan、zhang三、zhang san 这三个名称 查询zhang则只能查到zhang三、zhang san,查不到zhangsan,这个问题还没有解决,先记录下来以后解决

qq_41609488的博客 584

人工智能发展史(从起步到磅礴)以及浪潮阶段

随机森林是将多个有差异的弱学习器(决策树)Bagging并行组合,通过建立多个的拟合较好且有差异模型去组合决策,以优化泛化性能的一种集成学习方法。从论文里可以了解到,GPT-1具有1.17个参数,采用了12层的Transformer 解码器结构,使用5GB的无标注文本数据,在8个GPU上训练了一个月,然后再进行人工监督的微调。训练相结合的理念(该方法在当时计算力上还是有很多挑战,基本上都是和链式求导的梯度算法相关的),这也解决了单层感知器不能做非线性分类的问题,开启了神经网络新一轮的高潮。

xiao77224li的博客 7504

Elasticsearch 中文分词器 IK 配置和使用

Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果  看一个例子 curl -XGET 'http://localhost:9200/_analyze?pretty&analyzer=standard' -d ' 第二更新 ' #返回 { "tokens" : [ { "token" : "第", "start_off

Rome was not built in one day 1323

Ansys Lumerical FDTD硬件配置避坑指南:从RTX 4090到A100的GPU选择实战

本文针对Ansys Lumerical FDTD仿真计算,深入分析了从消费级RTX 4090到专业级A100的GPU硬件配置选择。文章指出,选择的关键在于显存容量能否容纳仿真模型,并对比了二者在显存、双精度算力及多卡扩展性上的核心差异,为不同预算和仿真规模的用户提供了实战避坑指南与配置建议。

weixin_29196891的博客 273

大数据运维面试题及答案

1. 架构组成:- 2 个 NameNode(Active 活跃节点、Standby 备用节点),实时同步元数据(通过 JournalNode 集群,默认 3 个节点,存储 edits 日志,Active 写入、Standby 读取以保持元数据一致);- 容错性强:通过 RDD 的 “ lineage(血缘)” 机制,任务失败时可快速重算,无需从头执行。:集群 “大脑”,管理元数据(文件目录、块位置),实时响应客户端请求,数据存于内存,元数据镜像(fsimage)和编辑日志(edits)持久化到磁盘;

weixin_42795092的博客 906

【Elasticsearch】18 ES文档的基本操作修改ik 分词配置与自定义分词

一、安装Nginx 配置分词 # cd /mydata/nginx/html/ # mkdir es # cd es # vi analyze.txt # 添加单词 中国梦 乔先生 张三丰 ESC :wq docker安装Nginx 二、配置ES # cd /mydata/elasticsearch/plugins/ik/config/ # vi IKAnalyzer.cfg.xml 添加分词地址 <?xml version="1.0" encoding="UTF-8"

promiseful的博客 628

PPT制作能力在职场中真的重要吗?一定要美术功底才能学好PPT吗?

我推出PPT技能培训专栏啦!好的PPT可以让你事半功倍、2023拥有PPT能力还可以让你具备一门极有价值的斜杠能力。更多内容请进:梦幻训练营专栏。专栏内会用本人积累的近10年的PPT学习方法论在短时间内教会你如何制作出精美绝伦的PPT,每篇教程后还会免费赠送一些小福利,不可多得。

打造全国最全的AI Agent开发知识领域的博客 728

Solr学习(二)——(IK分词器)中文分词器配置

(IK分词器)中文分词器配置 根据上一篇配置好solr后接着如下 第一步:将IK分词器中的jar文件、结束符、扩展词典丢到/opt下,如下图四个文件 第二步:将opt下IK分词器的jar包复制到solr的lib里面如下图: 第三步:在 /usr/local/tomcat/webapps/solr/WEB-INF/下创建一个classes文件,然后将剩余三个文件复制过去。 第四步:进入/u...

yb970521的博客 281

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

solr6.6.0学习(3)IK中文分词器的集成与配置

1.下载IK分词器,注意下载最新的。下载地址 2.将IK的jar文件拷贝到webapps\solr\WEB-INF\lib目录下 3.在sorhome\yournode(你的核心)\conf\managed-schema下增加如下配置: <fieldType name="text...

chufengan9199的博客 171

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

solr学习(4.1)-solr4.7中文分词器(ik-analyzer)配置

solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器。 一、版本信息 solr版本:4.7.0 需要ik-analyzer版本:IK Analyzer 2012FF_hf1 ik-analyzer下载地址:http://code.google.com/p/i

andyzhaojianhui的专栏 2566

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Solr学习(三)——Solr-7.7.0配置ik_analyzer

先学习单机版Solr-7.7.0的安装,请移步到 Solr学习(一)——Solr-7.7.0单机版(Ubuntu)。 下载 ik_analyzer 先下载solr7版本的ik分词器,下载地址:http://search.maven.org/#search|ga|1|com.github.magese 分词器GitHub源码地址:https://github.com/magese/ik-analy...

qq_39572257的博客 621

第六天内容

今日完成:配置好了双tomcat,解决了长期以来tomcat无法访问solr的问题 安装好了IK中文分词器 学习了有关solr 有关域的问题 明日计划:继续看视频学习有关solr的内容,模仿京东实现客户端查询语法,使用solrJ添加数据和修改索引库,学习solrJ 今日小结:团队讨论共同学习的学习效率更高,共同解决一个问题比自己单独解决问题的效率要高些 转...

85

solr安装及ik中文分词器配置

Solr 是Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 提供了比 Lucene 更为丰富的查询语句,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化Solr 可以独立运行,运行在 Jetty、Tomact 等这些 Servlet 容器中,Solr 索引的实现方式很简答,用Post 方法向 Solr 服务器发送一些描述 Field 及其内容的 XML 文档,Solr 根据XML 文档添加、删除、更新索引。

专注于 Java 后端架构、微服务、分布式、前端及 AI 领域的技术分享,是开发者获取硬核知识、交流实战经验的专业博客。 1407

solr快速上手:配置IK中文分词器(七)

IK中文分词器是一个国人开源的,基于java开发的轻量级中文分词器,能够实现对中文进行自然语言处理,并且支持自定义分词库,IK分词器本身也支持英文和数字的分词,满足中英文混合的业务场景。为什么需要中文分词器?我们可以在solr Analysis中进行分词,采用默认的英文分词器,可以看到中文被切分成了单个汉字,而按照自然语言来讲,我们更希望将其分词为俺中国man,这样本身也符合语言习惯,同时不用单个字分词,也节约了存储空间,所以我们需要更加灵活的中文分词器这种。

55555的博客 3008

solr8.2 配置中文分词器 ik-analyzer-solr8

一、下载安装Apache Solr 8.2.0 下载地址:http://lucene.apache.org/solr/downloads.html 解压缩: 二、启动solr服务 进入solr-8.2.0/bin目录: 输入cmd回车 控制台输入以下命令: // 启动服务 .\solr start // 关闭服务 .\solr stop -all // 重启服务 sol...

小匠心的博客 2223

Solr安装IK中文分词器

我们才Schema中重新添加字段,并选择字段对应的type就可以了,我们在dataimport中将查询出来的数据对应到school_name就可以。由于solr自带的分词器无法将中文根据语义分词,需要引入中文分词器IKAnalyzer。由于我在windows上没有看到具体的重启命令,所以这里我我是先关闭再启动。我们直接下载jar包就可以了。

陆漫漫的博客 849

Solr集成IK中文分词器实战指南

本文提供了Solr集成IK中文分词器的完整实战指南。针对Solr自带分词器处理中文效果差的问题,详细讲解了如何下载部署IK分词器、修改Schema配置、重启验证以及应用到实际字段。通过集成IK中文分词器,可实现从单字切割到语义理解的跨越,显著提升中文搜索的准确性和用户体验。

v6b7n8m9q0的博客 850

linux系统搭建solr7服务及配置IK中文分词器(支持最新solr8)

目录 solr搭建步骤--环境准备 solr搭建步骤--安装 solr启动 IK中文分词器 IK中文分词器的添加,下载地址点击-->:ik-analyzer-solr7(支持solr8) 导入数据库数据到solr ​ solr搭建步骤--环境准备 输入:java -version 检查是否已安装jdk环境 solr搭建步骤--安装 将solr和tomcat安装包上传到/...

weixin_42133396的博客 1288

Solr:配置IK中文分词器

从IK分词器的官方仓库、GitHub或其他可信来源下载适用于您Solr版本的IK分词器JAR包。确保下载的版本与您的Solr版本兼容。例如,如果您使用的是Solr 8.x版本,应下载对应版本的IK分词器。对于Solr服务的重启方式,请参考您的Solr部署指南或相关文档。至此,Solr已成功配置为使用IK中文分词器处理指定字段的中文文本。如果您的Solr部署结构不同,请确保将JAR文件放置到Solr实例能够加载到类路径的位置。可以根据需要添加或调整IK分词器的其他参数以及后续的分析器组件(如过滤器)。

qq_33240556的博客 1073
上一篇: java调用fastdfs
下一篇: Solr 初始全量导入数据库数据
一棵卿菜
博客等级 码龄8年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值