主页 > IT > Lucene学习系列(二)

Lucene学习系列(二)

归类于 IT

本节主要介绍Lucene中的索引类和查询类。

索引过程涉及到的类:IndexWriter,Directory,Analyzer,Document,Field。

1. IndexWriter

IndexWriter是索引过程的中心组件,它能创建一个新索引或者打开一个已存在的索引,并进行添加,删除和更新document的操作。IndexWriter不能对索引执行读操作和查询操作。IndexWriter将索引保存在Directory参数指定的位置。

2. Directory

Directory是存放索引的地方,它是一个抽象类,有很多实现,如直接利用FSDirectory的open方法得到一个文件系统路径。

3. Analyzer

Lucene不能直接对文本进行索引,文本需要被分割成单词再被索引,Analyzer正是对文本进行分割操作的类。如果需要索引的文本不是纯文本,而是富媒体文档格式如HTML页面等,则需要从中提取出纯文本,Tika可以帮很多忙。Analyzer是Lucene的关键部分,如何选择Analyzer是应用程序设计的关键一环。

4. Document

Analyzer处理document,document有多个独立的field组成,每个field都可能被索引。

5. Field

Field是name-value对,还有相应的一些选择,用于设置该field在索引过程中的行为,如是否进行分割,是否保存,是否被查询等。当有多个field具有相同的name时,它们的值按照添加的先后顺序连接,查询时就像一个单独的field一样。

查询过程涉及到的类:IndexSearcher,Term,Query,TermQuery,TopDocs。

1. IndexSearcher

IndexSearcher搜索由IndexWriter索引的内容。可以将IndexSearcher看作一个对索引执行只读操作的类。实例化时需要一个Directory对象,指定索引所在位置。它包含一些查询方法,其中一个包含参数Query对象和一个topN数量,返回TopDocs对象。

2. Term

Term是搜索的关键单元。Term类似于Field,也是name-value对。Term一般配合TermQuery使用,TermQuery是Query类的一个子类。

3. Query

除了TermQuery,还有BooleanQuery,PhraseQuery,PrefixQuery等。Query类是这些类的抽象父类。它包含很多有用的方法,其中有一个setBoost(float)很有用,它可以使某个子query对最终的相关性得分有更大贡献。

4. TermQuery

TermQuery用于匹配某些field包含指定值的document。

5. TopDocs

TopDocs是前topN相关document的容器。TopDocs还记录了docID和得分。

利用Lucene创建搜索应用涉及的两个步骤:建立索引和根据索引进行查询。

归类于 IT

评论已经关闭

顶部