摘要: 一、IndexReader性能分析 IndexReader完成了打开所有索引文件和提供底层reader API等繁重的工作,而IndexSearch则要简单得多。由于打开一个IndexReader需要较大的系统开销,因此最好是在所有搜索期间都重复使用一个IndexReader实例,只有在必要的时候才打开新的IndexReader。 另外,还可以从索引目录中直接创建IndexSearcher,这种情况下,系统会在后台建立自己私有的IndexReader,如果此时关闭Searcher,那么它同事也会关闭自己的IndexReader。因为IndexReader是由IndexSearcher打开的..阅读全文
posted @ 2014-04-10 17:55 逆心 阅读(404) | 评论 (2) 编辑
摘要: 一、分词的方法 分词的方法主要有以下几种: 1、单字切分 单字切分就是把一段文字按照每个字去建立索引。 如果用来切分“我爱你伟大的中国”,就会切成“我”,“爱”,“你”,“伟”,“大”,“的”,“中”,“国”。这种分词效率低,但也能解决一些问题,聊胜于无。 2、二分法 二分法就是把一段文字的每两个相邻的字算作一个词。同样对于上面的句子就会切成“我爱”,“爱你”,“你伟”,“伟大”,“大的”,“的中”,“中国”7个词。 3、词典法 词典法就是建立一个词典文件,然后使用词典和文字段落进行匹配,从而得出分词结果。在这种分词方法中,词典和匹配算法是关键。 做词典很容易,维护词典也不能...阅读全文
posted @ 2014-04-09 10:24 逆心 阅读(723) | 评论 (0) 编辑
摘要: 一、提取搜索结果 1、TopDocs对象的说明MaxScore:最高得分;TotalHits:匹配到的结果总数;ScoreDocs:匹配到的文档数组(内部可以获得文档Id与分数); 下面来看看获得的结果信息: Console.WriteLine(docs.MaxScore); //输出最高得分 Console.WriteLine(docs.TotalHits); //输出搜索结果数量 foreach (ScoreDoc d in docs.ScoreDocs) //输出文档得分与文档ID { Console.WriteLine(...阅读全文
posted @ 2014-04-03 16:48 逆心 阅读(255) | 评论 (0) 编辑
摘要: 一、解析搜索请求 搜索请求的概念是,用户输入关键词,然后程序去分析关键词,获取用户搜索的真实意图。 Lucene提供了一套QueryParser类,用来解析搜索请求。这个类是可以使用的。 1、QueryParser的基本使用 QueryParser用来分析用户输入的关键词,将关键词转换成Query对象。其构造方法如下所示: QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "title", new StandardAnalyzer(Lucene.Net.Util.Version.L阅读全文
posted @ 2014-04-02 12:07 逆心 阅读(775) | 评论 (0) 编辑
摘要: 一、索引管理 1、查看索引的相关信息 查看索引的信息大概有如下方法:通过IndexWriter类读取索引的相关信息,将其显示出来。通过IndexReader及其子类读取索引的相关信息,将其显示出来。通过可视化工具查看索引的相关信息。 1、使用IndexWriter类读取索引的相关信息 使用IndexWriter读取并非最佳方法。 2、使用IndexReader及其子类读取索引的相关信息 IndexReader类是专门用于读取索引信息的类,它是一个抽象类,含有FilterIndexReader、MultiReader、ParallelReader等子类。 IndexReader类通...阅读全文
posted @ 2014-04-01 10:11 逆心 阅读(382) | 评论 (0) 编辑
摘要: 一、执行搜索的基本方式 使用Lucene.net执行搜索,首先要创建IndexSearcher对象,然后通过Term和Query对象来封装用户输入的搜索条件,最后将结果封装在Hits对象中,返回给用户。 1、创建搜索器对象:IndexSearcher 创建IndexSearcher对象的方法:如下: IndexSearcher searcher = new IndexSearcher(索引目录实例); 创建IndexSearcher对象很容易,创建完成之后,就可以使用它进行搜索了。它最常用的方式是search(),使用search方法将返回一个结果集对象,即Hits。 2、封装搜索...阅读全文
posted @ 2014-03-28 13:41 逆心 阅读(417) | 评论 (0) 编辑
摘要: 一、理解创建索引的过程 创建索引的过程与写一本书差不多。 创建索引的过程如下:建立索引器IndexWriter,这相当于一本书的框架。建立文档对象Document,这相当于一篇文章。(对应数据库就是一张表)建立信息字段对象,这相当于一篇文章中的标题,正文等。(对应数据库就是一个字段)将Field添加到Document里面。将Document添加到IndexWriter里面。关闭索引器IndexWriter。 在创建索引的时候,有三个基本步骤:创建Field。将Field组织到一个Document里面,这样就完成了对一篇文章的包装。将多个Document组织到一个IndexWriter里面...阅读全文
posted @ 2014-03-26 17:31 逆心 阅读(359) | 评论 (0) 编辑
摘要: Lucene.net是java平台搜索插件Lucene的移植版。它的主要用于开发搜索引擎,站内搜索等。 开篇之前,写个最简单的DEMO,让自己先体验下Lucene.net的魅力,顺便搭建环境。 static void Main(string[] args) { //写入数据到索引 Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); Directory directory = new RAMDir...阅读全文