随笔分类 - lucene
摘要:通常,Lucene的初学者们对Lucene.net索引文件的并发访问、IndexReader和IndexWriter的线程安全性存在一定的误解。而准确地理解这些内容是十分重要的。此文简单的论述下这两个问题。 并发访问的规则 Lucene提供了一些修改索引的方法,例如索引新文档、更新文档和删除文档;在执行这些操作时,为了避免对索引文件造成损坏,需要遵循一些特定的规则。这类问题通常会在web应用程序中突显出来。因为web应用程序是同时为多个请求而服务的。Lucene的并发性规则虽然比较简单,但我们必须严格遵守: 1.任意数量的只读操作都可以同时执行。例如,多个线程或进程可以并行地对同一个索引进行搜
阅读全文
摘要:Lucene.net提供了很全面的数据搜索操作,你可以利用Lucene.net检索磁盘中的文件,网页,数据库中的数据,但是前提是预先对数据创建索引。Lucene索引过程分为三个主要的操作阶段:将数据转换成文本、分析文本、并将分析过的文本保存到索引库中。如图所示:1.数据转成文本:须将数据转换成Lucene能够处理的格式——纯文本字符流。2.分析文本:完成了针对待索引数据的预处理操作,并创建了带有若干个域的Document对象,就可以调用IndexWriter的addDocument(Document)方法,将数据传递给Lucene来进行索引操作。在对数据进行索引处理时,Lucene会首先分析(
阅读全文
摘要:前面的文章,我们已经对要检索的数据创建了索引,现在要做的就是为用户提供全文搜索的功能。通过Lucene我们还可以简单而高效地对搜索结果进行访问。此文和大家简单的说说利用Lucene.net进行数据的搜索。当我们查询Lucene的一个索引时,Lucene会返回一个有序的Hits对象集合(collection)Lucene使用默认的评分方式对该集合内的对象按照其得分高低进行排序。对于一个给定的查询,Lucene为每个文档计算一个评分(即一个表示相关性的数值)。Hits本身不是实际的匹配文档集,只是指向这些匹配文档的引用(reference)。Lucene.net中处理检索的核心API:类用 途In
阅读全文
摘要:在搜索引擎技术中,分词对于影响搜索引擎结果排序有着至关重要的作用。与英文不同的是,中文之间没有空格,并且由于中国文字的博大精深,常常一句话可以分出很多不同效果的词汇,这里就不做举例了,想必大家都有所体会。所以对于一个中文搜索引擎来说,中文分词技术是十分重要的,也是十分讲究的。在搜索引擎运行的机制中,有很多种中文分词的办法,例如正向最大匹配分词,逆向最大分析,基于统计的分词,基于词库的分词等。但是在实际的搜索引擎运行过程中,分词的办法却没有这么简单了。因为搜索引擎不仅仅要去考虑到分词结果的正确性,还需要考虑到对于分不出来的词的处理。 所以能写出一个好的分词算法是很不容易的,由于水平有限,这里主要
阅读全文
摘要:提到Lucene,想必园子中的老鸟们都有所耳闻,已经是数年前就出现的开源技术。很多站点都是利用它搭建自己网站的站内搜索。由于最近也在做数据检索方面的东西,也学习了下Lucene.net的使用。先来看下最终的效果:看上去还算是那么回事,我将利用几篇文章,和大家学习下Lucene.net创建索引,分词,检索等方面的知识。由于初学,有什么问题还望指教。此文先来和大家了解下Lucene.net,介绍给没有接触过的新手。Lucene:一个开源的使用Java语言编写的全文搜索引擎开发包。Lucene.net是使用在.NET平台下的搜索引擎开发工具,利用Lucene.net我们可以比较容易的搭建自己的数据检
阅读全文
摘要:通常,Lucene的初学者们对Lucene.net索引文件的并发访问、IndexReader和IndexWriter的线程安全性存在一定的误解。而准确地理解这些内容是十分重要的。此文简单的论述下这两个问题。并发访问的规则Lucene提供了一些修改索引的方法,例如索引新文档、更新文档和删除文档;在执行这些操作时,为了避免对索引文件造成损坏,需要遵循一些特定的规则。这类问题通常会在web应用程序中突显出来。因为web应用程序是同时为多个请求而服务的。Lucene的并发性规则虽然比较简单,但我们必须严格遵守:1.任意数量的只读操作都可以同时执行。例如,多个线程或进程可以并行地对同一个索引进行搜索。2
阅读全文
摘要:在网上看了一篇外文文章,里面介绍了提高Lucene索引速度的技巧,分享给大家。先来看下影响索引的主要因素:MaxMergeDocs该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬盘,生成一个新的索引segment文件。所以该参数也就是一个内存buffer,一般来说越大索引速度越快。MaxBufferedDocs这个参数默认是disabled的,因为Lucene中还用另外一个参数(RAMBufferSizeMB)控制这个bufffer的索引文档个数。其实MaxBufferedDocs和RAMBufferSizeMB这两个参数是可以一起使用的,一起使用时只要有一个触发条件满足就写入
阅读全文
摘要:系统简介HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件。开源协议是 Apache 2.0。HubbleDotNet提供了基于SQL的全文检索接口,使用者只需会操作SQL,就可以很快学会使用HubbleDotNet进行全文检索。 HubbleDotNet可以实现全文索引和查询、多域检索和排序、分组统计、消重、分类、聚类、多表关联查询等等一系列全文检索和数据挖掘功能。 HubbleDotNet提供开放的数据库适配器接口,可以和各种数据库完美整合,为各种数据库系统附加全文检索和数据挖掘功能。 HubbleDotNet设计了较为完善的并发控制程序,数据
阅读全文
摘要:优化搜索性能 虽然建立索引的操作非常耗时,但是那毕竟只在最初创建时才需要,平时只是少量的维护操作,更何况这些可以放到一个后台进程处理,并不影响用户搜索。我们创建索引的目的就是给用户搜索,所以搜索的性能才是我们最关心的。下面就来探讨一下如何提高搜索性能。 1 将索引放入内存 这是一个最直观的想法,因为内存比磁盘快很多。Lucene提供了RAMDirectory可以在内存中容纳索引: Directory fsDir = FSDirectory.getDirectory(“/data/index/”, false); Directory ramDir = new RAMDirectory(fsDir
阅读全文
摘要:对于并发,Lucene.Net 遵循以下规则:1. 允许任意多的读操作并发,即任意数量用户可同时对同一索引做检索操作。2. 即便正在进行索引修改操作(索引优化、添加文档、删除文档),依然允许任意多的检索操作并发执行。3. 不允许并发修改操作,也就是说同一时间只允许一个索引修改操作。Lucene.Net 内部已经对多线程安全进行了处理,打开 IndexWrite.cs / IndexReade.csr 文件,会发现很多操作都使用了 lock 进行多线程同步锁定。只要遵循一定的规则,就可以在多线程环境下安全运行 Lucene.Net。建议:1. Directotry、Analyzer 都是多线程安
阅读全文
摘要:Lucene.Net无障碍学习和使用:索引篇项目中可能需要再次用到Lucene.Net,利用空闲时间写了个demo,主要涉及到索引的创建、删除、更新和一个简单查询。在本文示例中,Lucene.Net的版本是2.4.0,某些类和方法与最新版本或者较旧的版本有较多不同,希望您阅读顺利。一、简单认识索引Lucene.Net的应用相对比较简单。一段时间以来,我最多只是在项目中写点代码,利用一下它的类库而已,对很多名词术语不是很清晰,甚至理解可能还有偏差。从我过去的博客你也可以看出,语言表达一直不是个人所长,就算”表达“了也有大面积抄书的嫌疑,所以很多概念性的介绍能省则省(除非特别有别要说明),希望有心
阅读全文
摘要:/** * Field.Store.COMPRESS:压缩保存,用于长文本或二进制数据 * Field.Store.YES:保存 * Field.Store.NO:不保存 * * Field.Index.NO:不建立索引 * Field.Index.TOKENIZED:分词,建索引 * Field.Index.UN_TOKENIZED:不分词,建索引 * Field.Index.NO_NORMS:不分词,建索引.但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间 * * Field.TermVector.NO:不保存term vectors * Field....
阅读全文
摘要:Lucene.Net是Lucene在dot net平台上的移植版本。它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己的搜索引擎,当然,是全文搜索。它不是一个程序,拿到它并不能立刻运行,你必须自己实现逻辑过程。这是一个和.Net Framework一样的框架。Lucene是用Java写的,尔后衍生出Nutch,接着又衍生出Hadoop。这些可以说和Lucene没有内在联系,但是它们可以扩充Lucene的应用规模。目前,在dot net平台,还没发现有Nutch和Hadoop的移植程序。不过有了Lucene.Net就该庆幸了,已经能够做很多事情。Lucene和Lucene.
阅读全文
摘要:本人看到这篇非常不错的Lucene.Net入门基础教程,就转载分享一下给大家来学习,希望大家在工作实践中可以用到。一.简单的例子//索引Private void Index(){ IndexWriter writer = new IndexWriter(@"E:\Index", new StandardAnalyzer()); Document doc = new Document(); doc.Add(new Field("Text","哦耶,美丽的姑娘。", Field.Store.YES, Field.Index.TOKENIZ
阅读全文