注意:每个Document可以有多个Field,不同的Document可以有不同的Field,同一个Document可以有相同的Field(域名和域值都相同)每个文档都有一个唯一的编号,就是文档id。1.3.4分析文档将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元,可以将语汇单元理解为一个一个的单词。比如下边的文档经过分析如下:原文档内容:Lucene is a Java full-text search engine. Lucene is not a completeapplication, but rather a code library and API that can easily be usedto add search capabilities to applications.分析后得到的语汇单元:lucene、java、full、search、engine。。。。每个单词叫做一个Term,不同的域中拆分出来的相同的单词是不同的term。term中包含两部分一部分是文档的域名,另一部分是单词的内容。例如:文件名中包含apache和文件内容中包含的apache是不同的term。1.3.5索引文档对所有文档分析得出的语汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到Document(文档)。注意:创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。倒排索引结构是根据内容(词语)找文档,如下图: 倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。1.4搜索流程搜索就是用户输入关键字,从索引(index)中进行搜索的过程。根据关键字搜索索引,根据索引找到对应的文档,从而找到要搜索的内容(这里指磁盘上的文件)。1.4.1用户用户可以是自然人,也可以是远程调用的程序。1.4.2用户搜索界面全文检索系统提供用户搜索的界面供用户提交搜索的关键字,搜索完成展示搜索结果。比如: Lucene不提供制作用户搜索界面的功能,需要根据自己的需求开发搜索界面。1.4.3创建查询用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法,比如:语法“fileName:spring.txt”表示要搜索Field域的内容为“spring.txt”的文档语法“lucene AND java”表示要搜索即包括关键字“lucene”也包括“java”的文档。1.4.4执行搜索搜索索引过程:1.根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。比如搜索语法为“lucene AND java”表示搜索出的文档中即要包括lucene也要包括java。 2、由于是AND,所以要对包含lucene或java词语的链表进行交集,得到文档链表应该包括每一个搜索词语3、获取文档中的Field域数据。1.4.5展示结果以一个友好的界面将查询结果展示给用户,用户根据搜索结果找自己想要的信息,为了帮助用户很快找到自己的结果,提供了很多展示的效果,比如搜索结果中将关键字高亮显示,百度提供的快照等。