传智播客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[])
相关文档:
在通读jdk源代码的时候发现许多java方法前都有native关键字修饰,最后得知native是与C++联合开发的时候用的,java自己开发不用。
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数 ......
译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少。如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。原文转自http://www.artima.com/lejava/articles/equality.html 三位作者都是不同领 ......
在命令行界面用native2ascii工具
1.将汉字转为Unicode:
C:\Program Files\Java\jdk1.5.0_04\bin>native2ascii
测试
\u6d4b\u8bd5
2.将Unicode转换为汉字:
C:\Program Files\Java\jdk1.5.0_04\bin>native2ascii -reverse ......
1、 public class HelloWorld {
public static void main(String args[]){
String s="daxiong";
System.out.println("Hello,World!"+"lu shenglong"+s);
char c[]={'s','w','q'};
&nb ......
我今天学习了徐老师将的hibernate框架知识,我做了简单的笔记:
集合属性大致分为二种:
单纯的集合属性,像List,Set或数组等集合属性。
2,Map集合属性,每个属性值多有相对应的Key映射。
&nb ......