lucene 读书笔记 20070708
来源:互联网 发布:自我意识觉醒 知乎 编辑:程序博客网 时间:2024/05/21 09:26
索引的优化
lucene的优化其实做起来是很简单的,只需要调用一个方法就行了:optimize()
他会将磁盘上的多个segment进行合并,它并不会加快创建索引的速度,相反会降低。
如果一次性为很多数据建立索引的话,建议等索引建立完之后再进行优化。
Lucene 的同步机制
为了保证索引文件不被误操破坏,lucene增加了锁机制
主要有两种;
Write.lock
用于防止多个线程同时访问一个索引文件而设置,当在IndexWriter初始化时获得,在关闭时释放,当IndexReader删除或反删除索引时也会获得锁。
Commit.lock
主要是在Segment被建立、合并、读取时生成。
这两个所我们是不用管理的。
下面是in action 中关于同步的讲解:
只读的任何操作均可以同时运行,例如可以使用多线程同时进行查询
任何只读的操作均可以在一个索引被修改的时候被执行(索引优化,增加、修改、删除Document,)
每一时刻只能由一个索引修改操作在运行
一个索引同一时刻只能被一个IndexWriter或IndexReader操作
下面是in action 的一些知识总结,关于创建索引部分的:
2 如何增加多个查询单元到一个Field
String baseWord = "fast";
String synonyms[] = String {"quick", "rapid", "speedy"};
Document doc = new Document();
doc.add(Field.Text("word", baseWord));
for (int i = 0; i < synonyms.length; i++) {
doc.add(Field.Text("word", synonyms[i]));
}
4 撤销对索引删除进行的操作
在IndexReader的close()之前调用IndexReader的
undeleteAll
()
,,可以进行撤销
对索引进行更新操作
删掉旧的,再加新的:
public class DocumentUpdateTest extends BaseIndexingTestCase {
public void testUpdate() throws IOException {
assertEquals(1, getHitCount("city", "Amsterdam"));
IndexReader reader = IndexReader.open(dir);
reader.delete(new Term("city", "Amsterdam"));
reader.close();
assertEquals(0, getHitCount("city", "Amsterdam"));
IndexWriter writer = new IndexWriter(dir, getAnalyzer(),
false);
Document doc = new Document();
doc.add(Field.Keyword("id", "1"));
L
doc.add(Field.UnIndexed("country", "Netherlands"));
doc.add(Field.UnStored("contents",
"Amsterdam has lots of bridges"));
doc.add(Field.Text("city", "Haag"));
writer.addDocument(doc);
writer.optimize();
writer.close();
assertEquals(1, getHitCount("city", "Haag"));
}
protected Analyzer getAnalyzer() {
return new WhitespaceAnalyzer();
}
private int getHitCount(String fieldName, String searchString)
throws IOException {
IndexSearcher searcher = new IndexSearcher(dir);
Term t = new Term(fieldName, searchString);
Query query = new TermQuery(t);
Hits hits = searcher.search(query);
int hitCount = hits.length();
searcher.close();
return hitCount;
}
}
进行批量更新的方法
Open IndexReader.
2 Delete all the Documents you need to delete.
3 Close IndexReader.
4 Open IndexWriter.
5 Add all the Documents you need to add.
6 Close IndexWriter.
- lucene 读书笔记 20070708
- LUCENE读书笔记 20070702
- LUCENE读书笔记20070703
- LUCENE 读书笔记 20070704
- LUCENE 读书笔记 20070712
- 《Lucene In Action》读书笔记
- Lucene读书笔记——1. 初识Lucene
- 【读书笔记】Lucene+nutch搜索引擎开发
- 【读书笔记】Lucene分析与应用
- Lucene读书笔记——4. Lucene的分析过程
- Lucene读书笔记——2. 构建索引
- Lucene读书笔记——3. 为应用程序添加搜索功能
- Lucene读书笔记——5. 高级搜索技术
- 《开发自己的搜索引擎》读书笔记——Lucene搜索
- 《开发自己的搜索引擎》读书笔记——Lucene的分析器
- lucene
- Lucene
- lucene
- TTL值改变导致网络打印机无法打印
- QQ抓图功能的提取
- [Asp.net学习]asp.net操作Excel文章总结(转)
- a
- 请看着我的眼睛
- lucene 读书笔记 20070708
- 我的python & django (2) 2007-7-8
- 买份保险
- 哆啦A梦主题乐园,一定要去!
- 新来报到,随意写写!
- 在wince系统下访问物理地址
- 十种认知误区,哪种你没有
- Windows CE下驱动程序开发基础
- Object Serialization and ObjectInputStream/ObjectOutputStream -Java 学习笔记 (27)