lucene&solr全文检索_4改进

在之前的程序中我们发现分词不太准确,因此我们可以使用支持中文分词。

  分析器的执行过程:

  

  从一个reader字符流开始,创建一个基于reader的tokenizer分词器,经过三个tokenfilter(第一个大写变小写,第二个用回车替换空格,去掉不需要的a,the,and,逗号等)生成tokens。要看分析器的分析效果只需要看tokenstream中的内容就可以了,每个分析器都有一个方法tokenstream,返回一个tokenstream对象。

  lucene自带中文分析器:

standardAnalyzer:单字分词即一个一个分

CJKAnalyzer:二分法,即两个一分,、

SmartChineseAnalyzer:对中文支持好,但扩展性差,对词库的操作不是很好处理。

由此可见上面三个分析器效果并不是很理想,因此要使用第三方分析器:

  • paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代码在 2008-06-03,在svn中最新也是2010年提交,已经过时。
  • mmseg4j:最新版已从 https://code.google.com/p/mmseg4j/ 移至 https://github.com/chenlb/mmseg4j-solr,支持Lucene 4.10,且在github中最新提交代码是2014年6月,从09年~14年一共有:18个版本,也就是一年几乎有3个大小版本,有较大的活跃度,用了mmseg算法。
  • IK-analyzer: 最新版在https://code.google.com/p/ik-analyzer/上,支持Lucene 4.10从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开 始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词 歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。 但是也就是2012年12月后没有在更新。
  • ansj_seg:最新版本在 https://github.com/NLPchina/ansj_seg tags仅有1.1版本,从2012年到2014年更新了大小6次,但是作者本人在2014年10月10日说明:“可能我以后没有精力来维护ansj_seg了”,现在由”nlp_china”管理。2014年11月有更新。并未说明是否支持Lucene,是一个由CRF(条件随机场)算法所做的分词算法。
  • imdict-chinese-analyzer:最新版在 https://code.google.com/p/imdict-chinese-analyzer/ , 最新更新也在2009年5月,下载源码,不支持Lucene 4.10 。是利用HMM(隐马尔科夫链)算法。
  • Jcseg:最新版本在git.oschina.net/lionsoul/jcseg,支持Lucene 4.10,作者有较高的活跃度。利用mmseg算法。

我们使用IKanalyzer,需要导入jar包:,并将核心文件放入src中,然后就可以使用了。

同时你可以在xml文件中扩展

扩展的内容在ext.dic中(可以复制stopword.dic然后删除内容,重新输入自己想要扩展的内容)例如在ext.dic中加入高富帅白富美等

打开stopword.dic,即分析之后删除的文字。

注意无论使用什么分析器,都要注意搜索使用的分析器要和索引使用的分析器一致。

  

原文地址:https://www.cnblogs.com/tkg1314/p/12249934.html

时间: 2024-10-08 20:30:30

lucene&solr全文检索_4改进的相关文章

lucene&solr全文检索_5索引的维护

增加新内容的时候,或者删除的时候我们需要对索引进行增删改查来进行索引的维护. 先上代码: package come.me.lucene; //索引维护 import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; impo

lucene&solr全文检索_3查询索引

创建完索引之后,我们需要查询. 百度的查询接口及结果如图所示: 具体步骤已经在上个博客中写到,直接上代码:(由于是一个完整的程序,我把创建索引的代码也post上) package come.me.lucene; import static org.junit.jupiter.api.Assertions.*; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.lucene.analysis

lucene&solr全文检索_7solr后台界面的介绍

接着上个博客,用浏览器打开solr之后的界面: Dashboard:仪表盘,显示了该solr实例开始运行的时间.版本.系统资源,jvm等信息 Logging:solr的运行日志,如果出现问题会告诉你什么问题. Core Admin:solr core 的管理界面.solr core是solr 的一个独立运行实例单位,他可以对外提供索引和搜索服务,一个solr工程可以运行多个solrcore,一个core对应一个索引目录. 可以手动添加solr core: 步骤: 1.复制collection1改

Lucene/Solr搜索引擎开发系列 - 第1章 Solr安装与部署(Jetty篇)

一.为何开博客写<Lucene/Solr搜索引擎开发系列>     本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/C++:现就职于一家大型国企所属电子商务公司,主要使用语言为Java,负责公司新一代搜索引擎的开发工作,故开此系列来总结自己在Lucene/Solr上的学习历程,同时,也希望能给予对搜索引擎开发有兴趣的朋友一些帮助和启发. 二.Lucene和Solr简要介绍     Lucene是apache软件基金

Lucene/Solr 搜索引擎开发 第1章

一.本章思维导图   二.Solr的安装和部署 1.介绍Lucene和Solr分别是什么的?     Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.    

Lucene/Solr学习笔记(一)

solr简介 Solr是一个开源的,企业级搜索服务器.Solr可以理解为Lucene的服务器化产品.它使用java编写,遵循http协议和xml协议,使用多种数据格式(如json,xml)传递数据. 但她不是对Lucene的一次简单封装,Solr的大多数特征都与Lucene不同.Solr 和 Lucene 的界限经常是模糊的.以下是Solr的主要特性: 通过HTTP请求来     建立索引和搜索索引 拥有数个缓存 来 加快搜索速度 一个基于web的管理员控制台 运行时做性能统计,包括缓存 命中/

Lucene/Solr开发经验

1.开篇语2.概述3.渊源4.初识Solr5.Solr的安装6.Solr分词顺序7.Solr中文应用的一个实例8.Solr的检索运算符 [开篇语]按照惯例应该写一篇技术文章了,这次结合Lucene/Solr来分享一下开发经验. Lucene是一个使用Java语言写的全文检索开发包(API),利用它可以实现强大的检索功能,它的详细介绍大家可以去Google上搜索一下,本文重点放在Solr相关的讨论上. [概述]目前国内研究Solr的人不多,而且大多是因为项目开发需要.Solr师承Lucene,为

Lucene/Solr搜索引擎开发系列 - 第2章 Solr安装与部署(Tomcat篇)

一.安装环境 图1-1 Tomcat和Solr的版本     我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1-2 Tomcat安装目录     1.如图1-2所示,为Tomcat的解压目录: 图1-3 Tomcat首页     2.在目录E:\apache-tomcat-8.0.9\bin中,找到startup.bat文件,双击该文件,启动Tomcat服务器,等待几秒钟后,在浏览器中输入http:/

Lucene .NET 全文检索

近期做项目中有用到过Lucene,那个模块是由一位前端大神负责的,空闲时间我也做了个关于Lucene做全文检索的Demo,记录下来,方便以后学习. 关于Lucene的原理,网上有长篇大论的文章,有兴趣的话可以去阅读,再次我就直奔主题,在代码中分析其原理. 1.创建索引(此处我用的是盘古分词) 注:在后台代码的第一行上加上 #define notes这样一行代码,目的是可以用外侧代码的#if,作用嘛 用过之后就很明白了,嘿嘿. #region 创建索引 void CreateIndex(objec