lucene
Lucene的使用,简单来说可以划分为两种类型,一是建立索引,二是搜索内容。
一、建立索引的五个基础类Document,Field,IndexWriter,Analyzer,Directory
1、Document类:用来描述文档,这里的文档可以指一个HTML页面,一封电子邮件,或者是一个文本文件。一个Document对象由多个Field对象组成的。可以把一个Document对象想象成数据库中的一个记录,而每个Field对象就是记录的一个字段。
2、Field类:用来描述一个文档的某个属性,比如一封电子邮件的标题和内容可以用两个Field对象分别描述。
3、Analyzer类:用来对文档内容进行分词处理,Analyzer类是一个抽象类,它有多个实现,针对不同的语言和应用需要选择适合的Analyzer,Analyzer会把分词后的内容交给IndexWriter来建立索引。
4、IndexWriter类:用来创建索引的一个核心类,作用是把一个个的Document对象加到索引中来。
5、Directory类:表示索引文件存储位置的抽象类。有两个常用的子类:
*FSDirectory—在实际文件系统中存储索引的Directory实现。该类对于大型索引非常有用。
*RAMDirectory—在内存中存储所有索引的实现。该类适用于较小的索引,可以完整加载到内存中,在应用程序终止之后销毁。由于索引保存在内存中,所以速度相对较快。
二、搜索内容的四个基础类:Searche、Term、Query和TopDocs
1、Searcher是一个抽象基类,包含各种超负荷搜索方法。IndexSearcher是一个常用的子类,允许在给定的目录中存储搜索索引。Search方法返回一个根据计算分数排序的文档集合。Lucene为每个匹配给定查询的文档计算分数。IndexSearcher是线程安全的;一个实例可以供多个线程并发使用。
2、Term是搜索的基本单位。它由两部分组成:单词文本和出现该文本的字段的名称。Term对象也涉及索引编制,但是可以在Lucene内部创建。
3、Query和子类
Query是一个用于查询的抽象基类。搜索指定单词或词组涉及到在项中包装它们,将项添加到查询对象,将查询对象传递到IndexSearcher的搜索方法。
Lucene包含各种类型的具体查询实现,比如TermQuery、BooleanQuery、PhraseQuery、PrefixQuery、RangeQuery、MultiTermQuery、FilteredQuery、SpanQuery等。以下部分讨论Lucene查询API的主查询类。
4、TopDocs封装搜索结果以及ScoreDoc的总数