lucene3.0.0 indexReader 和indexSearch 区别 索引的删除 索引的优化
package com.txt.test2; //indexReader 和 indexSearch 区别 import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.SimpleFSDirectory; import org.apache.lucene.util.Version; import org.junit.Test; public class IndexReaderTest { String txt1 = "holle world chengdu"; String txt2 = "holle world sichuang chengdu"; String txt3 = "holle world sichuang chengdu chengdu"; String txt4 = "holle world sichuang chengdu chengdu chengdu"; private File file = new File("f:" + File.separator + "indexDir8"); // 创建词元分析器 private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); @Test public void create() throws Exception { // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); // 创建索引器 追加的方式 IndexWriter writer = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); // 创建文档 /** * 参数1 : 字段名称 相当于数据库的字段名称 参数2 :数据源名称 参数3 : 是否要把数据源名称存储到索引库中Store.YES 参数4 * : 是否要使用分词器作分析Index.ANALYZED */ Document document = new Document(); document.add(new Field("id", "1", Store.YES, Index.ANALYZED)); document.add(new Field("content", txt1, Store.YES, Index.ANALYZED)); Document document2 = new Document(); document2.add(new Field("id", "2", Store.YES, Index.ANALYZED)); document2.add(new Field("content", txt2, Store.YES, Index.ANALYZED)); Document document3 = new Document(); document3.add(new Field("id", "3", Store.YES, Index.ANALYZED)); document3.add(new Field("content", txt3, Store.YES, Index.ANALYZED)); Document document4 = new Document(); document4.add(new Field("id", "4", Store.YES, Index.ANALYZED)); document4.add(new Field("content", txt4, Store.YES, Index.ANALYZED)); writer.addDocument(document); writer.addDocument(document2); writer.addDocument(document3); writer.addDocument(document4); writer.close(); } //从索引中删除Document对象 已删除Query对象的形式 @Test public void deleteQuery()throws Exception{ // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); // 创建索引器 追加的方式 IndexWriter writer = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); // 创建查询解析器 以id为查询目标 QueryParser parser = new QueryParser(Version.LUCENE_30, "id", analyzer); Query query = parser.parse("1"); //删除document 传一个query对象进去 //相当于 delete from tanbieName where id = 1; writer.deleteDocuments(query); writer.close(); } //删除 传一个Term对象 @Test public void deleteTerm()throws Exception{ // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); // 创建索引器 追加的方式 IndexWriter writer = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); //封装了一个field的字段名 和 它对应的那个值 Term term = new Term("id", "2"); writer.deleteDocuments(term); writer.close(); } //优化索引 可以将你索引目录下的一些垃圾的文件 清理掉 @Test public void optimize() throws Exception{ // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); // 创建索引器 追加的方式 IndexWriter writer = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); //优化索引 writer.optimize(); writer.close(); } //修改索引 先删除索引 再添加索引 @Test public void updateIdx() throws Exception{ Document document4 = new Document(); document4.add(new Field("id", "5", Store.YES, Index.ANALYZED)); document4.add(new Field("content", "holle content4", Store.YES, Index.ANALYZED)); // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); // 创建索引器 追加的方式 IndexWriter writer = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); //条件 Term term = new Term("id", "4"); //更新 update tableName set content = content4 where id = 4; writer.updateDocument(term, document4); writer.close(); } @Test public void search() throws Exception { // 索引存储目录 Directory directory = new SimpleFSDirectory(file); // 创建查询器 IndexSearcher searcher = new IndexSearcher(directory, true); // 创建查询解析器 对文档document的content字段进行查询 QueryParser parser = new QueryParser(Version.LUCENE_30, "content", new StandardAnalyzer(Version.LUCENE_30)); //创建查询类 String key = "holle"; Query query = parser.parse(key); //获取钱n位索引 TopDocs tDocs = searcher.search(query, 100); for(int i = 0; i<tDocs.scoreDocs.length; i++){ ScoreDoc sDoc = tDocs.scoreDocs[i]; Document document = searcher.doc(sDoc.doc); System.out.println("id:"+document.get("id")); System.out.println("content:"+document.get("content")); } searcher.close(); } //所有的内容都可以查出来 包括已经被删除的索引内容也会查出来 @Test public void reader() throws Exception{ // 索引库存储目录 Directory directory = new SimpleFSDirectory(file); //直接读取索引库目录 IndexReader reader = IndexReader.open(directory,true); //获取索引目录有多少条索引文档 int max = reader.maxDoc(); for (int i = 0; i < max; i++) { Document document = reader.document(i); System.out.println("id : "+document.get("id")); System.out.println("content : "+document.get("content")); } } }
相关推荐
1. **增强的性能**:3.0.0 版本在索引速度和查询性能上进行了优化,提高了整体的运行效率,使得大规模数据处理更为便捷。 2. **新的查询解析器**:引入了新的查询解析器,支持更复杂的查询语法,提供更灵活的查询...
The new version is mostly a cleanup release without any new features. All deprecations targeted to be removed in version 3.0 were removed.
总的来说,Lucene 3.0.0入门DEMO是一个很好的起点,它可以帮助新手快速了解和实践Lucene的基本用法。通过实际操作,你可以更好地掌握Lucene的索引构建和搜索机制,从而在自己的项目中灵活运用。
而 `lucene3.0.0` jar 包则是 Lucene 的一个重要版本,发布于2009年,它提供了丰富的文本分析、索引构建和搜索功能。此版本引入了一些新的特性,优化了性能,并修复了一些已知问题。 在 Lucene 3.0.0 中,主要包含...
Lucene 3.0.0是历史上的一个重要版本,引入了诸多改进和优化,如性能提升、内存管理优化、新的查询语法和更强大的分析器等。此版本对API进行了调整,使得开发者能更灵活地定制和扩展搜索功能。 二、Lucene架构 2.1...
4. 分块索引(Segmented Index):Lucene采用分块索引策略,支持动态添加和删除文档,且能有效管理大量数据。 四、性能优化 1. 压缩技术:Lucene使用压缩算法减少索引的存储空间,同时在不影响搜索速度的前提下...
lucene3.0.0的学习资料,里边有lucene的jar包,具体的入门讲解:http://blog.csdn.net/lengyuhong/archive/2010/11/17/6014597.aspx
1. **索引**:Lucene的索引机制是一种倒排索引(Inverted Index),它将文档中的词汇映射到包含这些词汇的文档列表。这种数据结构使得搜索效率极高,能够在短时间内返回相关结果。 2. **分词器(Tokenizer)**:...
最新的lucene api手册, 感觉看这个比一堆html方便。。。 支持开源
3. 索引(Index):索引是Lucene的核心,它将原始文本转化为一种可快速搜索的数据结构。通过分词器(Analyzer),将文本分解成单词(Token),然后构建倒排索引(Inverted Index),使得我们可以高效地查找包含特定...
Lucene首先需要理解的是它的核心概念,包括文档(Document)、字段(Field)、术语(Term)和倒排索引(Inverted Index)。每个文档由多个字段组成,字段内包含文本内容。Lucene通过分析这些文本,将其拆分为术语,...
- **索引(Index)**:索引是Lucene处理数据的核心,它将文本数据转换为可供快速搜索的结构。 - **分词器(Tokenizer)**:分词器将输入的文本分解为一系列的词语,这是建立索引的第一步。 - **分析器(Analyzer)...
通过上述步骤,我们不仅成功地在Tomcat下集成了Lucene-3.0.0,而且还掌握了如何通过控制台或Web应用程序建立索引和执行搜索的基本方法。这对于初学者来说是一个很好的实践机会,有助于深入了解全文搜索引擎的工作...
本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...
在深入探讨Lucene删除索引这一主题之前,我们先...总之,Lucene的删除索引机制是一个复杂但高效的过程,涉及到了位向量、段管理和索引优化等多个环节。在实际应用中,合理使用这些功能可以确保索引的准确性和资源效率。
由于涉及文件I/O,所以可能需要考虑性能优化和错误处理。 **2. 查询过程** 查询阶段,用户输入查询字符串,Lucene将这个字符串转换为查询对象,然后与索引进行匹配。查询操作通常包括以下步骤: - 查询分析(Query...
2. **Luke 工具**:Luke 是一个用于查看和分析 Lucene 索引的桌面应用程序,它的全名是 Lucene Index Toolbox。Luke 可以显示索引的详细信息,包括字段、文档数量、词项频率、术语字典、文档分词等,是开发者调试和...
在Lucene 5版本中,引入了诸多优化,如更高效的倒排索引结构、改进的分词器、更灵活的查询语法等,使得搜索性能和灵活性都有所提升。然而,Lucene的索引构建是离线进行的,这意味着在新的数据到来时,必须重新构建...
- 创建`IndexReader`和`IndexSearcher`:它们分别用于读取索引和执行搜索。 - 创建`QueryParser`:解析用户输入的查询字符串并生成`Query`对象。 - 执行搜索:使用`IndexSearcher`的`search`方法,传入`Query`和`...