Lucene的基本使用之API详解

1.1.1.1、Document(文档类)

Document:文档对象,是一条原始的数据

Lucene的基本使用之API详解_第1张图片

1.1.1.2、Field(字段类)

一个Document中可以有很多个不同的字段,每一个字段都是一个Field类的对象。

一个Document中的字段其类型是不确定的,因此Field类就提供了各种不同的子类,来对应这些不同类型的字段。

Lucene的基本使用之API详解_第2张图片

这些子类有一些不同的特性:

1) 创建索引

DoubleField、FloatField、IntField、LongField、StringField、TextField这些子类一定会被创建索引。但是不一定会被存储到文档列表。要通过构造函数中的参数Store来指定:如果Store.YES代表存储,Store.NO代表不存储

Lucene的基本使用之API详解_第3张图片

        2)创建索引,又会分词

TextField即创建索引,又会被分词。StringField等会创建索引,但是不会被分词。

        如果不分词,会造成整个字段作为一个词条,除非用户完全匹配,否则搜索不到:

Lucene的基本使用之API详解_第4张图片

        我们一般,需要搜索的字段,都会做分词:

        3)是否存储

StoreField一定会被存储,但是一定不创建索引

        StoredField可以创建各种数据类型的字段:

Lucene的基本使用之API详解_第5张图片

问题1:如何确定一个字段是否需要存储?

        如果一个字段要显示到最终的结果中,那么一定要存储,否则就不存储

问题2:如何确定一个字段是否需要创建索引?

        如果要根据这个字段进行搜索,那么这个字段就必须创建索引。

问题3:如何确定一个字段是否需要分词?

        前提是这个字段首先要创建索引。然后如果这个字段的值是不可分割的,那么就不需要分词。例如:ID

1.1.1.3、Directory(目录类)

指定索引要存储的位置

Lucene的基本使用之API详解_第6张图片

        FSDirectory:文件系统目录,会把索引库保存到本地磁盘。

                特点:速度略慢,但是比较安全

        RAMDirectory:内存目录,会把索引库保存在内存。

                特点:速度快,但是不安全

noSQL:not only sql

Mongodb

Redis

1.1.1.4、IndexWriterConfig(索引写入器配置类)

1) 设置配置信息:Lucene的版本和分词器类型

Lucene的基本使用之API详解_第7张图片

2)设置OpenMode参数

1.1.1.5、IndexWriter(索引写入器类)

l 索引写出工具,作用就是 实现对索引的增(创建索引)、删(删除索引)、改(修改索引)

Lucene的基本使用之API详解_第8张图片

l 可以一次创建一个,也可以批量创建索引

@Test
 
public void testCreater2() throws IOException{
 
 
// 创建文档对象集合
 
List docs = new ArrayList<>();
 
 
// 创建文档对象
 
Document document1 = new Document();
 
document1.add(new StringField("id", "1", Store.YES));
 
document1.add(new TextField("title", "谷歌地图之父跳槽FaceBook", Store.YES));
 
docs.add(document1);
 
// 创建文档对象
 
Document document2 = new Document();
 
document2.add(new StringField("id", "2", Store.YES));
 
document2.add(new TextField("title", "谷歌地图之父加盟FaceBook", Store.YES));
 
docs.add(document2);
 
// 创建文档对象
 
Document document3 = new Document();
 
document3.add(new StringField("id", "3", Store.YES));
 
document3.add(new TextField("title", "谷歌地图创始人拉斯离开谷歌加盟Facebook", Store.YES));
 
docs.add(document3);
 
// 创建文档对象
 
Document document4 = new Document();
 
document4.add(new StringField("id", "4", Store.YES));
 
document4.add(new TextField("title", "谷歌地图之父跳槽Facebook与Wave项目取消有关", Store.YES));
 
docs.add(document4);
 
// 创建文档对象
 
Document document5 = new Document();
 
document5.add(new StringField("id", "5", Store.YES));
 
document5.add(new TextField("title", "谷歌地图之父拉斯加盟社交网站Facebook", Store.YES));
 
docs.add(document5);
 
 
// 索引库对象
 
Directory directory = FSDirectory.open(new File("C:\\tmp\\indexDir"));
 
// 创建索引写入器配置对象,1-版本,2-分词器:标准分词器
 
IndexWriterConfig conf = new IndexWriterConfig(Version.LATEST, new StandardAnalyzer());
 
// OpenMode打开模式,枚举类,CREATE:覆盖,APPEND:追加,
 
conf.setOpenMode(OpenMode.CREATE);
 
// 创建索引写入器对象
 
IndexWriter indexWriter = new IndexWriter(directory, conf);
 
 
// 执行写入操作
 
indexWriter.addDocuments(docs);
 
// 提交
 
indexWriter.commit();
 
// 关闭
 
indexWriter.close();
 
}

 

你可能感兴趣的:(技术文章)