1.1.1.1、Document(文档类)
Document:文档对象,是一条原始的数据
1.1.1.2、Field(字段类)
一个Document中可以有很多个不同的字段,每一个字段都是一个Field类的对象。
一个Document中的字段其类型是不确定的,因此Field类就提供了各种不同的子类,来对应这些不同类型的字段。
这些子类有一些不同的特性:
1) 创建索引
DoubleField、FloatField、IntField、LongField、StringField、TextField这些子类一定会被创建索引。但是不一定会被存储到文档列表。要通过构造函数中的参数Store来指定:如果Store.YES代表存储,Store.NO代表不存储
2)创建索引,又会分词
TextField即创建索引,又会被分词。StringField等会创建索引,但是不会被分词。
如果不分词,会造成整个字段作为一个词条,除非用户完全匹配,否则搜索不到:
我们一般,需要搜索的字段,都会做分词:
3)是否存储
StoreField一定会被存储,但是一定不创建索引
StoredField可以创建各种数据类型的字段:
问题1:如何确定一个字段是否需要存储?
如果一个字段要显示到最终的结果中,那么一定要存储,否则就不存储
问题2:如何确定一个字段是否需要创建索引?
如果要根据这个字段进行搜索,那么这个字段就必须创建索引。
问题3:如何确定一个字段是否需要分词?
前提是这个字段首先要创建索引。然后如果这个字段的值是不可分割的,那么就不需要分词。例如:ID
1.1.1.3、Directory(目录类)
指定索引要存储的位置
FSDirectory:文件系统目录,会把索引库保存到本地磁盘。
特点:速度略慢,但是比较安全
RAMDirectory:内存目录,会把索引库保存在内存。
特点:速度快,但是不安全
noSQL:not only sql
Mongodb
Redis
1.1.1.4、IndexWriterConfig(索引写入器配置类)
1) 设置配置信息:Lucene的版本和分词器类型
2)设置OpenMode参数
1.1.1.5、IndexWriter(索引写入器类)
l 索引写出工具,作用就是 实现对索引的增(创建索引)、删(删除索引)、改(修改索引)
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();
}