A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】Lucene的基本使用之API详解

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 可以一次创建一个,也可以批量创建索引
[AppleScript] 纯文本查看 复制代码
@Test

public void testCreater2() throws IOException{


// 创建文档对象集合

List<Document> 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();

}
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马