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.TOKENIZED)); writer.AddDocument(doc); writer.Close(); } //搜索 Private void Search(string words) { IndexSearcher searcher = new IndexSearcher(@"E:\Index"); Query query = new QueryParser(“Text”, new StandardAnalyzer()).Parse(words); Hits hits = searcher.Search(query); for (int i = 0; i < hits.Length(); i++) System.Console.WriteLine(hits.Doc(i).GetField("Text").StringValue(); searcher.Close(); } 初识Lucene Lucene是什么 Lucene是一个高性能的、可扩展的信息检索工具包。它只是Java类库,并不是现成的应用程序。它提供简单易用却十分强大的API接口,基于它你可以快速的构建功能强大的搜索程序(搜索引擎?)。当前最新版2.9.2.1。 什么是索引 为了实现快速的搜索,Lucene会首先将需要处理的数据以一种称为倒排索引(Inverted Index)的数据结构进行存储。怎样理解倒排索引呢?简单的说,倒排索引并不是回答“这个文档中包含哪些单词?”这个问题,而是经过优化以后用来快速回答“哪些文档包含词XX?”这个问题。就像需要给书籍整理一份供快速查找的目录一样,Lucene也得为需要被搜索的数据整理优化出一份索引文件(Index file),而这个过程称之为“索引”(Indexing)。 Lucene的核心类 索引过程: IndexWriter Directory Analyzer Document Field 搜索过程: IndexSearcher Term Query TermQuery Hits 索引 索引过程的流程图 注:Lucene索引过程分为三个主要的操作阶段:将数据换转成文本、分析文本、并将分析过的文本保存到索引库中 基本的索引操作 添加索引 Document Field(理解Field的参数) 异构Document 追加域 增量索引 删除索引 软删除,仅添加了删除标记。调用 IndexWriter.Optimize() 后真正删除。 IndexReader reader = IndexReader.Open(directory); // 删除指定序号(DocId)的 Document。 reader.Delete(123); // 删除包含指定 Term 的 Document。 reader.Delete(new Term(FieldValue, "Hello")); // 恢复软删除。 reader.UndeleteAll(); reader.Close(); 更新索引 事实上,Lucene没有更新索引的方法 ...