您的位置:首页 > 其它

3.5 实例讲解Lucene索引的结构设计

2017-05-09 00:34 375 查看
3.2节我们已经运行了一个Lucene建立索引的小程序,这一节我们就以这个小程序为例讲解一下Lucene建立索引的过程。

1 document = new Document();
2                     document.add(new StringField("path", f.getName(),Field.Store.YES));
3                     System.out.println(file.getName());
4                     document.add(new StringField("name", file.getName(),Field.Store.YES));
5                     InputStream stream = Files.newInputStream(Paths.get(file.toString()));
6                     document.add(new TextField("content", new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))));//textField内容会进行分词
7                     //document.add(new TextField("content", new FileReader(file)));  如果不用utf-8编码的话直接用这个就可以了


View Code
Field是Lucene建立索引的最小单元,相当于关系表中的属性。一个Document可以包含多个Field。Document添加Field只需调用Add()方法。

Lucene为我们提供了多种类型的Field,比如IntField, LongField, StringField, TextField等。程序实例中,我们用到了StringField和TextField。我们有必要来了解一下这两种Field的区别,因为这关系到倒排表的建立:

StringField:对域进行索引,但不进行分词,将域值作为单一的语汇单元,适用于索引那些不能被分解的域值,如URL,文件路径,电话号码等。参考StringField文档

TextField: 对域既索引又分词,Lucene会对这个域进行分词并建立倒排表。参考TextField文档

5.添加Document。

对IndexWriter对象调用addDocument方法将文档添加到索引库中。

6.关闭IndexWriter对象。

把所有的文档都添加到索引库中后,关闭Indexwriter对象。

ps:这篇博客以文集为例形象生动地说明了IndexWriter,Document和Field的关系,大家不妨看一看:例子

关于Lucene的具体索引步骤就介绍到这里~~

.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: