随笔分类 -  lucene

摘要:paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.作者Attilax 艾龙, EMAIL:1466519819@qq.com来源:attilax的专栏地址:http://blog.csdn.net/attilaxver:2012IKAnalyzer 的默认词库的匹配度可能不好..可以使用扩展词库...但是,更好的办法是,禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.需要实现Configuration接口,实现getMainDictionary以及getQuantifierDicionary俩个方法..都返回空的走ok兰..Configuration cfg = n 阅读全文
posted @ 2014-03-28 19:02 郑文亮 阅读(1574) 评论(0) 推荐(0) 编辑
摘要:http://bbs.csdn.net/topics/350072885 阅读全文
posted @ 2014-03-21 16:06 郑文亮 阅读(322) 评论(0) 推荐(0) 编辑
摘要:近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的commit方法,然后重新打开reader,这个过程很耗费时间,因为writer的提交必须对索引里的所有新文件进行同步,同步操作耗费系统资源,近实时搜索使我们能够对新创建还未提交的索引进行搜索。 在4.5的版本上做一个简单的测试示例,参考lucene in action[java]view plaincopyprint?importjunit.framework.TestCase;importorg 阅读全文
posted @ 2013-12-31 15:40 郑文亮 阅读(2301) 评论(1) 推荐(1) 编辑
摘要:作为lucene的Query工具,QueryParser却是最重要的一个。简单的说,QueryParser能够根据用户的输入来进行解析,自动构建合适的Query对象。下面简单总结一下它的实现:目录用户输入QueryParser的初始化短语和QueryParserQueryParser的模糊匹配查询通配符与QueryParserQueryParser指定Field查询QueryParser的范围RangeQuery查询QueryParser的多域MultiFieldQueryParser查询1、用户输入(词条的定义)当用户输入要查询的关键字串后,QueryParser首先会对其进行解析,而这种解 阅读全文
posted @ 2013-12-28 11:25 郑文亮 阅读(2321) 评论(0) 推荐(1) 编辑
摘要:分词器对英文的支持是非常好的。一般分词经过的流程:1)切分关键词2)去除停用词3)把英文单词转为小写但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好。国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,而且随着Lucene的版本更新而不断更新,目前已更新到IK Analyzer 2012版本。IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词 阅读全文
posted @ 2013-12-27 13:05 郑文亮 阅读(2843) 评论(0) 推荐(0) 编辑
摘要:在lucene使用过程中,如果要对同一IndexWriter中不同 Document,不同Field中使用不同的analyzer,我们该如何实现呢?通过对《lucene in action》的阅读,发现是可以解决这一问题的。lucene可以正对整个IndexWriter对象或者每一个document对象或者特定 Field使用不同的分析器。Java代码 复制代码 Analyzer analyzer = new StandardAnalyzer(); IndexWriter writer = new IndexWriter(direcotry, analyzer, true); // Docum 阅读全文
posted @ 2013-12-27 11:41 郑文亮 阅读(949) 评论(0) 推荐(0) 编辑
摘要:最近在用lucene4.0,因为之前也没用过lucene其它版本,所以也不是很熟悉。但每次上网查资料代码的时候,总发现网友们贴的代码都是之前的版本的。当我拷贝过来的时候总会出问题,去查API的时候,总是显示 Deprecated,虽然能用但看到上面打了一个斜杠总是感觉不舒服的。现在我就列出我遇到的一些过时的方法吧!以前在增加索引的时候给document增加字段都是Field FieldPath = new Field("path", textFiles[i].getPath(),Field.Store.YES, Field.Index.NO);可以指定该字段是否存储,是否索 阅读全文
posted @ 2013-12-26 11:22 郑文亮 阅读(393) 评论(0) 推荐(0) 编辑
摘要:http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/document/Field.html 阅读全文
posted @ 2013-12-26 10:51 郑文亮 阅读(244) 评论(0) 推荐(0) 编辑
摘要:在Lucene 3.x时代,《Lucene In Action》是一本相当不错的参考书,书中详细介绍了Lucene各种高级使用技术,对于开发者来说非常实用。但是近期Lucene升级到了4.x版本,在性能等各方面有了很大的提高,值得在新项目中使用。然而Lucene 4.x中的API相比3.x来说有了很大的改变,《Lucene In Action》中的很多内容都已经过时了,并且由于4.x推出的时间不长,还没有比较好的文档来对用法进行说明,这个系列文章就是想记录下自己使用Lucene 4.x的经验体会,供大家参考使用。由于现在网络搜索都希望达到实时搜索的效果,用户上传文章后,希望立即在搜索结果中可见 阅读全文
posted @ 2013-12-25 14:07 郑文亮 阅读(654) 评论(0) 推荐(0) 编辑
摘要:Lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎。Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序。它本身只关注文本的索引和搜索。Lucene使你可以为你的应用程序添加索引和搜索能力。目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的得到搜索 阅读全文
posted @ 2013-12-25 13:26 郑文亮 阅读(2248) 评论(0) 推荐(0) 编辑
摘要:花了两天的时间研究了下Lucene.Net 发现确实挺好玩.... 最新版本是3.0.3 (最后更新时间2012-10) 可惜3.0.3版本的Lucene.net无法和盘古分词 (最新版为2.3.1.0 最后更新时间 2010-10)一起使用.....因为盘古分词 基于2.9.x.x版本 写的 ,在 3.0.3中很多 接口 和 类名 发生了 变化..(当然 网上 也有解决方案 :基于新的接口 重新 编译 盘古分词) 今天主要用的是 Lucene.Net 2.9.2.2 与盘古分词 2.3.0.0版本. 主要功能就是 创建索引,和搜索 下面贴出 2段代码 创建索引: View Cod... 阅读全文
posted @ 2013-12-24 11:57 郑文亮 阅读(3277) 评论(6) 推荐(2) 编辑
摘要:如何提高Lucene构建索引的速度 hans(汉斯) 2013-01-27 10:12对于Lucene>=2.3:IndexWriter可以自行根据内存使用来释放缓存。调用writer.setRAMBufferSizeMB()方法设置缓存尺寸。确保你没有任何的遗留代码调用setMaxBufferedDocs方法,因为写入器可以根据两种情况一起释放缓存(哪个更早发生)。使用你可以提供的全部内存。在释放缓存之前使用更多的内存,意味着Lucene写入更大的段,意味着延迟合并的发生。LUCENE-843中的测试发现,针对所测内容集合48MB内存是最优值,但是,你的应用可能有不同的最优值。关闭复合 阅读全文
posted @ 2013-12-21 16:03 郑文亮 阅读(668) 评论(0) 推荐(0) 编辑
摘要:前言 首先自问自答几个问题,以让各位看官了解写此文的目的什么是站内搜索?与一般搜索的区别? 很多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索“.net学习”,如果有“.net的学习”,Like就无法搜索到,这明显不符合需求,但是站内搜索就能做到),另外Like会造成全盘扫描,会对数据库造成很大压力,为什么不用数据库全文检索,跟普通SQL一样,很傻瓜,灵活性不行为什么不用百度、google的站内搜索? 毕竟是别人的东西,用起来肯定会受制于人(哪天你的网站火了,它看你不爽了,就可能被K),主要还是索引的不够及时,网站新的内容,需要一定时间才能.. 阅读全文
posted @ 2013-12-21 15:16 郑文亮 阅读(528) 评论(1) 推荐(0) 编辑
摘要:最近在学习Lucene的过程中遇到了需要多域搜索并排序的问题,在网上找了找,资料不是很多,现在都列出来,又需要的可以自己认真看看,都是从其他网站粘贴过来的,所以比较乱,感谢原创的作者们! 使用MultiFieldQueryParser类即可。示例代码:Java代码packagecom.lucene.search;importjava.io.File;importjava.io.IOException;54com.cnimportorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.queryPa 阅读全文
posted @ 2013-12-21 09:26 郑文亮 阅读(8075) 评论(1) 推荐(0) 编辑
摘要:1.针对多个域的一次性查询1.1.三种方案 使用lucene构造搜索引擎的时候,如果要针对多个域进行一次性查询,一般来说有三种方法: 第一种实现方法是创建多值的全包含域的文本进行索引,这个方案最简单。但是这个防范有个缺点:你不能直接对每个域的加权进行控制。 第二种方法是使用MultiFieldQueryParser,它是QueryParser的子类,它会在后台程序中实例化一个QueryParser对象,用来针对每个域进行查询表达式的解析,然后使用BooleanQuery将查询结果合并起来。当程序向BooleanQuery添加查询子句时,默认操作符OR被用于最简单的解析方法中。为了实现... 阅读全文
posted @ 2013-12-21 09:23 郑文亮 阅读(9755) 评论(2) 推荐(3) 编辑
摘要:1,使用indexreader创建indexsearcher. 2,indexsearcher在使用完了以后不要关闭. 3.使用indexreader.isCurrent()判断索引是否被indexwriter改动. 4,如果索引被改动,indexsearcher.close()先前那个,然后new indexsearcher(indexreader).传string给searcher,searcher会维护一个内部的reader,当本次搜索结束后reader会被关掉.如果使用reader构造,reader在本次搜索结束后不会被关掉,除非你自己调用reader.close();所以用reade 阅读全文
posted @ 2013-12-20 14:40 郑文亮 阅读(1369) 评论(0) 推荐(0) 编辑
摘要:Lucene版本:3.0一般情况下,lucene的IndexSearcher都要写成单实例,因为每次创建IndexSearcher对象的时候,它都需要把索引文件加载进来,如果访问量比较大,而索引也比较大,那就很容易造成内存溢出!但是如果仅仅按照一般的单实例来写的话,如果更新了索引,那么在不重启服务的情况下,Searcher对象是搜索不到索引更新后的内容的.如何解决呢,这里给出一个方法!在这个方法里,建造了一个Factory类,分别管理IndexReader和IndexSearcher的单实例.import java.io.File; import java.io.IOException; .. 阅读全文
posted @ 2013-12-20 14:21 郑文亮 阅读(2621) 评论(0) 推荐(0) 编辑
摘要:作者:eaglet 盘古分词开发了多元分词算法,其与lucene.net 配合构建全文搜索,经测试准确度接近google和baidu的水平。现将一些实现方法和测试结果公布出来,供关心分词和搜索技术的朋友们参考。 中文分词按照分词粒度来分,分成 一元分词,二元分词,多元分词和精确分词等类型。一元分词就是最简单的分词,将所有的中文字符按照单字形式输出。二元分词按双字形式输出。多元分词则是将 一句话中可能的单词组合按照一定规则输出,允许输出的词有重叠。精确分词则是将一句话中最准确的单词组合输出,不允许输出的词有重叠。当然这里用精确这个 词来修饰只是为了与其他几种分词方法区分,不可能有完全精确的分.. 阅读全文
posted @ 2013-12-03 17:23 郑文亮 阅读(1378) 评论(0) 推荐(0) 编辑
摘要:在某些软件下载网站的全文搜索应用中往往需要根据部分或者全部的版本号来匹配查询。然而对于版本信息的提取,无论是采用增加单词还是其他什么办法都 无法很好的实现。好在盘古分词提供了自定义规则的接口,我们可以通过实现自己的自定义规则来完成一些特殊信息的提取。这篇文章也作为盘古分词自定义规则使 用的一个示例文章,希望大家看了这篇文章后可以举一反三,实现诸如IP地址提取,Email 提取,网址提取等等特殊提取功能的自定义规则。首先先说一下需求。我们希望将版本信息字符串 比如 V1.2.1.0 从文章中提取出来,分词为 v/1.2.1.0/1.2.1/1.2 这种形式,这样无论搜索用户输入 1.2.1.0 阅读全文
posted @ 2013-12-03 16:39 郑文亮 阅读(554) 评论(0) 推荐(0) 编辑
摘要:作者:eaglet在某些软件下载网站的全文搜索应用中往往需要根据部分或者全部的版本号来匹配查询。然而对于版本信息的提取,无论是采用增加单词还是其他什么办法都无法很好的实现。好在盘古分词提供了自定义规则的接口,我们可以通过实现自己的自定义规则来完成一些特殊信息的提取。这篇文章也作为盘古分词自定义规则使用的一个示例文章,希望大家看了这篇文章后可以举一反三,实现诸如IP地址提取,Email 提取,网址提取等等特殊提取功能的自定义规则。首先先说一下需求。我们希望将版本信息字符串 比如 V1.2.1.0 从文章中提取出来,分词为 v/1.2.1.0/1.2.1/1.2 这种形式,这样无论搜索用户输入 1 阅读全文
posted @ 2012-02-29 11:09 郑文亮 阅读(256) 评论(0) 推荐(0) 编辑