传智播客java学习 lucene进阶
我今天学习了lucene的一些知识,我做了简单的笔记:
索引文件结构:
倒排索引,索引对象是文档中的单词等,用来存储这些单词在一个文档中的位置。例如,有些书在最后提供的索引(单词——页码的对应列表),就可以看成是一种倒排序索引。可以通过一些关键字,在全书中检索出与之相关的部
索引文件的检索与维护
词汇表规模相对较小,文档集合规模较大。进行检索时,先从检索词汇表开始,然后找到相对应的文档。如果查询中仅包含一个关键词,则在词汇表中找到该单词,并取出他对应的文档就可以了。如果查询中包含多个关键词,则需要将各个单词检索出的记录进行合并。
维护倒排索引有三个操作:插入、删除和更新文档。但是更新操作需要较高的代价。因为文档修改后(即使是很小的修改),就可能会造成文档中的很多的关键词的位置都发生了变化,这就需要频繁的读取和修改记录,这种代价是相当高的。因此,一般不进行(真正的)更新操作,而是使用“先删除,后创建”的方式代替更新操作。
Lucene常用的API:
Document :Lucene所操作的对象
Field:组成Document的元素,代表一个属性。Store、Index
new Field( String name, String value, Store store, Index index )
Directory:索引库(目录)
FSDirectory :真实的目录
RAMDirectory:在内存中的一个虚拟的目录
QueryParser:把查询字符串变为查询对象的工具。使用子类: MultiFieldQueryParser
new MultiFieldQueryParser(String[] fields, Analyzer a)
Term:代表某个属性中的一个关键词(目录中出现的条目),是搜索的最小单位
Query :查询对象(封装的过滤条件)。有很多子类,对应各种各样的查询方式。
TopDocs(一套) :代表查询结果
// 添加索引
addDocument( Document doc )
// 更新
updateDocument(Term term, Document doc)
// 删除
deleteDocument(Term term)
// 合并索引库
addIndexesNoOptimize(Directory[])
相关文档:
1.Duplicated Code
代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。
2.Long method
它是传统结构化的“遗毒”。一个方法应当具有自我独立的意图,不要把几个意图放在一起。 ......
下面以编译 /src/com/dream/io/ScannerTest.java为示例:
1、用javac编译.java文件时,进入src目录后,输入 javac com/dream/io/ScannerTest.java, 回车,即可编译ScannerTest.java文件为.class文件;也可,进入 /src/com/dream/io/ 目录后, 输入 javac ScannerTest.java, 回车,也可编译 ScannerTest.java文件为 .clas ......
(注意:下面文件都在f:\myjava中)
{
3个源文件:MyApp.java,MyLib.java,PrintSchool.java;
建文件夹org\Jie
其中MyLib和PrintSchool放在包org.Jie中(import org.Jie)
在cmd.exe中运行
javac -d org\Jie MyLib.java //在org\Jie\org\jie生成了MyLib.class文件,将该文件 ......
这是clone技术介绍的第一篇。本篇主要介绍对象clone技术的基本知识。
Clone基本知识储备
在Java里提到clone技术,就不能不提java.lang.Cloneable接口和含有clone方法的Object类。所有具有clone功能的类都有一个特性,那就是它直接或间接地实现了Cloneable接口。否则,我们在尝试调用clone()方法时,将会触发CloneNo ......