Lucene的基本概念

  • Index

    Index就是索引库(相当于书的目录),文档的集合组成索引,和一般的数据库不一样,Lucene不支持主键。在lucene中并不存在一个叫做Index的类。
    创建索引的时候用IndexWriter,搜索的时候用IndexReader
    索引库在物理形式上一般是位于一个路径下的一系列文件。

  • Analyzer

分析器,一段有意义的文字需要通过Analyzer来分割成一个个词语后才能按关键词搜索。StandartdAnalyzer是Lucene中常用的分析器,对于中文分词有CJKAnalyzer、SmartChinieseAnalyzer等。

  • Token
    Analyzer返回的结果就是一串Token。Token包含一个代表词本身含义的字符串(也就是词本身嘛)和该词在文章中相应的起止偏移位置,Token还包含一个用来存储词类型的字符串。
  • Document
    一个Document代表索引库中的一条记录(书目录中的其中一个条目),也叫做文档。要搜索的信息封装成Document后通过IndexWriter写入索引库。调用Searcher接口按关键词搜索后,返回的也是一个封装后的Document列表。

    在Lucene6.1.0
    文档中对
    Document
    的描述如下:

Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it.
Note that fields which are not stored are not available in documents retrieved from the index.

简单的翻译如下:

文档是建立索引和搜索的基本单位,一个文档由一系列的filed组成,每个field有一个名称和一个值(键值对),一个field可以随文档一起存储,在搜索时候随着Document一起被返回。因此,每个Document都应该由一个或者多个能够唯一标识它的field组成。值得注意的是,没有被存储的field在检索的时候是不会被返回的。

怪不得每次创建Field的时候,都会有个Field.Store.YES,如下:

Field pathField = new StringField("path", file.toString(), Field.Store.YES);
  • Field

一个Document可以包含多个列,叫做Field。例如一篇文章可以包含“标题”、“正文”、“修改时间”等Field。创建这些列对象后,可以通过Document的add方法增加这些列。如:

Document doc = new Document();   
Field pathField = new StringField("path", file.toString(), Field.Store.YES);
doc.add(pathField);

和一般的数据库不一样,一个文档的一个列可以有多个值。例如一篇文档即可以属于互联网类,有可以属于科技类。

  • Term
    Term是搜索语法的最小单位,复杂的搜索语句会分解成一个Term查询。它表示文档的一个词语,Term由两部分组成:它表示的词语和这个词语所出现的Field。

Note: Lucene中的API相对数据库来说比较灵活,没有类似数据库先定义表结构后使用的过程。如果前后两次写索引时定义的列名称不一样,Lucene会自动创建新的列,所以Field的一致性需要我们自己掌握。

你可能感兴趣的:(Lucene的基本概念)