`
sungang_1120
  • 浏览: 323645 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

lucene3.0.0 indexReader 和indexSearch 区别 索引的删除 索引的优化

 
阅读更多
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"));
}
}
}

 

 

分享到:
评论

相关推荐

    lucene-3.0.0

    1. **增强的性能**:3.0.0 版本在索引速度和查询性能上进行了优化,提高了整体的运行效率,使得大规模数据处理更为便捷。 2. **新的查询解析器**:引入了新的查询解析器,支持更复杂的查询语法,提供更灵活的查询...

    Lucene3.0.0 jar包

    The new version is mostly a cleanup release without any new features. All deprecations targeted to be removed in version 3.0 were removed.

    lucene3.0.0 入门DEMO

    总的来说,Lucene 3.0.0入门DEMO是一个很好的起点,它可以帮助新手快速了解和实践Lucene的基本用法。通过实际操作,你可以更好地掌握Lucene的索引构建和搜索机制,从而在自己的项目中灵活运用。

    lucene3.0.0jar及IKAnalyzer

    而 `lucene3.0.0` jar 包则是 Lucene 的一个重要版本,发布于2009年,它提供了丰富的文本分析、索引构建和搜索功能。此版本引入了一些新的特性,优化了性能,并修复了一些已知问题。 在 Lucene 3.0.0 中,主要包含...

    java全文搜索lucene-3.0.0-src+lib.zip

    Lucene 3.0.0是历史上的一个重要版本,引入了诸多改进和优化,如性能提升、内存管理优化、新的查询语法和更强大的分析器等。此版本对API进行了调整,使得开发者能更灵活地定制和扩展搜索功能。 二、Lucene架构 2.1...

    lucene-3.0.0-src.zip

    4. 分块索引(Segmented Index):Lucene采用分块索引策略,支持动态添加和删除文档,且能有效管理大量数据。 四、性能优化 1. 压缩技术:Lucene使用压缩算法减少索引的存储空间,同时在不影响搜索速度的前提下...

    lucene3.0.0的学习资料

    lucene3.0.0的学习资料,里边有lucene的jar包,具体的入门讲解:http://blog.csdn.net/lengyuhong/archive/2010/11/17/6014597.aspx

    lucene-core-3.0.0.rar_lucene_lucene-core3

    1. **索引**:Lucene的索引机制是一种倒排索引(Inverted Index),它将文档中的词汇映射到包含这些词汇的文档列表。这种数据结构使得搜索效率极高,能够在短时间内返回相关结果。 2. **分词器(Tokenizer)**:...

    lucene 3.0.0 api

    最新的lucene api手册, 感觉看这个比一堆html方便。。。 支持开源

    lucene全文检索简单索引和搜索实例

    3. 索引(Index):索引是Lucene的核心,它将原始文本转化为一种可快速搜索的数据结构。通过分词器(Analyzer),将文本分解成单词(Token),然后构建倒排索引(Inverted Index),使得我们可以高效地查找包含特定...

    基于lucene技术的增量索引

    Lucene首先需要理解的是它的核心概念,包括文档(Document)、字段(Field)、术语(Term)和倒排索引(Inverted Index)。每个文档由多个字段组成,字段内包含文本内容。Lucene通过分析这些文本,将其拆分为术语,...

    Lucene 索引的简单使用

    - **索引(Index)**:索引是Lucene处理数据的核心,它将文本数据转换为可供快速搜索的结构。 - **分词器(Tokenizer)**:分词器将输入的文本分解为一系列的词语,这是建立索引的第一步。 - **分析器(Analyzer)...

    Lucene-3.0.0+Tomcat集成.doc

    通过上述步骤,我们不仅成功地在Tomcat下集成了Lucene-3.0.0,而且还掌握了如何通过控制台或Web应用程序建立索引和执行搜索的基本方法。这对于初学者来说是一个很好的实践机会,有助于深入了解全文搜索引擎的工作...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    Lucene之删除索引

    在深入探讨Lucene删除索引这一主题之前,我们先...总之,Lucene的删除索引机制是一个复杂但高效的过程,涉及到了位向量、段管理和索引优化等多个环节。在实际应用中,合理使用这些功能可以确保索引的准确性和资源效率。

    Lucene索引和查询

    由于涉及文件I/O,所以可能需要考虑性能优化和错误处理。 **2. 查询过程** 查询阶段,用户输入查询字符串,Lucene将这个字符串转换为查询对象,然后与索引进行匹配。查询操作通常包括以下步骤: - 查询分析(Query...

    lucene 索引 查看 工具

    2. **Luke 工具**:Luke 是一个用于查看和分析 Lucene 索引的桌面应用程序,它的全名是 Lucene Index Toolbox。Luke 可以显示索引的详细信息,包括字段、文档数量、词项频率、术语字典、文档分词等,是开发者调试和...

    lucene5+zoie实现近实时索引

    在Lucene 5版本中,引入了诸多优化,如更高效的倒排索引结构、改进的分词器、更灵活的查询语法等,使得搜索性能和灵活性都有所提升。然而,Lucene的索引构建是离线进行的,这意味着在新的数据到来时,必须重新构建...

    Lucene索引器实例

    - 创建`IndexReader`和`IndexSearcher`:它们分别用于读取索引和执行搜索。 - 创建`QueryParser`:解析用户输入的查询字符串并生成`Query`对象。 - 执行搜索:使用`IndexSearcher`的`search`方法,传入`Query`和`...

Global site tag (gtag.js) - Google Analytics