对文档创建好索引后,就能够在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,而后再在创建好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。 数据库
为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory。下面咱们分别介绍一下这五个类的用途: 函数
Document 搜索引擎
Document 是用来描述文档的,这里的文档能够指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document 对象由多个 Field 对象组成的。能够把一个 Document 对象想象成数据库中的一个记录,而每一个 Field 对象就是记录的一个字段。 spa
Field 对象
Field 对象是用来描述一个文档的某个属性的,好比一封电子邮件的标题和内容能够用两个 Field 对象分别描述。 索引
Analyzer 内存
在一个文档被索引以前,首先须要对文档内容进行分词处理,这部分工做就是由 Analyzer 来作的。Analyzer 类是一个抽象类,它有多个实现。针对不一样的语言和应用须要选择适合的 Analyzer。Analyzer 把分词后的内容交给 IndexWriter 来创建索引。 文档
IndexWriter string
IndexWriter 是 Lucene 用来建立索引的一个核心的类,他的做用是把一个个的 Document 对象加到索引中来。
Directory
这个类表明了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。
//索引文件的存放位置
string INDEX_FILE_PATH = "C:\\wwwroot\\Test\\" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.Ticks.ToString();
//实例化一个索引器(须要三个参数)
//一、path 索引器的存放路径
//二、Analyzer 一个分析器
//三、是否在索引目录下从新建立索引文件,false的话在原有文件上叠加
IndexWriter indexwrite = new IndexWriter(INDEX_FILE_PATH, new StandAnalyzer(), true);
//Document能够看作是数据库中一条记录,field能够看作为一个字段
Document doc = new Document();
//向doc容器里添加一个field,"pkid"为field的名字,第二个参数为其值,第三个参数为是否存储,第四个参数为是否索引
doc.Add(new Field("pkid", “数据1”, Field.Store.YES, Field.Index.UN_TOKENIZED));//存储该field,不建立索引
doc.Add(new Field("title",“数据2”, Field.Store.YES, Field.Index.UN_TOKENIZED));//存储该field,不建立索引
doc.Add(new Field("summary", "数据1",Field.Store.YES, Field.Index.UN_TOKENIZED));//存储该field,建立索引
indexwrite.AddDocument(doc);
indexwrite.Optimize();
indexwrite.Close();//建立索引成功,关闭索引
咱们注意到类 IndexWriter 的构造函数须要三个参数,第一个参数指定了所建立的索引要存放的位置,他能够是一个 File 对象,也能够是一个 FSDirectory 对象或者 RAMDirectory 对象。第二个参数指定了 Analyzer 类的一个实现,也就是指定这个索引是用哪一个分词器对文挡内容进行分词。第三个参数是一个布尔型的变量,若是为 true 的话就表明建立一个新的索引,为 false 的话就表明在原来索引的基础上进行操做。接着程序遍历了目录下面的全部文本文档,并为每个文本文档建立了一个 Document 对象。而后把文本文档的两个属性:路径和内容加入到了两个 Field 对象中,接着在把这两个 Field 对象加入到 Document 对象中,最后把这个文档用 IndexWriter 类的 add 方法加入到索引中去。这样咱们便完成了索引的建立。接下来咱们进入在创建好的索引上进行搜索的部分。