`
jander
  • 浏览: 9361 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简单、通用的Lucene 索引管理

阅读更多
目的
一般我们存储在数据库中的数据,都可以由pojo类表示。通用的Lucene索引管理就是要能够对所有的pojo能够实行Luncene索引。

用法
 
//建立属性映射列表
List list = new ArrayList();
FieldAttribute nameAttr = new FieldAttribute("name",  "name", "YES", "TOKENIZED");
//这是一个嵌套属性.
FieldAttribute nestedAttr = new FieldAttribute("txt",  "nested.txt", "YES", "TOKENIZED");	
	
list.add(nameAttr);
list.add(nestedAttr);
                
 //建立主键属性映射
FieldAttribute idAttr = new FieldAttribute("id", "id", "YES", "UN_TOKENIZED");
//建立索引管理器
IndexManager engine = new IndexManager("c:/index", list, idAttr, null);
TestEntity data=new TestEntity(1, "自相矛盾");
data.setNested(new NestedObject("楚人有鬻盾与矛者,誉之曰:“吾盾之坚,物莫能陷也。”又誉其矛曰:“吾矛之利,于物无不陷也。”或曰:“以子之矛陷于之盾,何如?”其人弗能应也。——《韩非子》"));
TestEntity[] datas = new TestEntity[1];
datas[0] = data;
//创建索引
engine.createIndex(datas);
                 
//添加索引
TestEntity entity = new TestEntity(2, "刻舟求剑");
entity.setNested(new NestedObject(" 楚人有涉江者,其剑自舟中坠于水,遽契其舟曰:'是吾剑之所从坠。'舟止,从其所契者入水求之。舟已行矣,而剑不行,求剑若此,不亦惑乎? —— 战国·吕不韦《吕氏春秋·察今》"));
engine.addIndex(entity);
                
//更新索引
TestEntity entity = new TestEntity(1, "新自相矛盾");
entity.setNested(new NestedObject("楚人"));
engine.updateIndex(entity);
//删除索引
engine.deleteIndex(new TestEntity(1));





简单、通用的Lucene 索引管理包含的类


   FieldAttribute


   它的功能是映射实体,并能够根据实体对象,得到一个Lucene的Field。

public class FieldAttribute {
    private String fieldName;
    //实体的属性,可以是简单属性,也可以使嵌套属性。
    private String entityProperty;
    //对应 Field.Store
    private Field.Store storeStyle;
    //对应 Field.Index
    private Field.Index indexStyle;
    //根据实体对象,得到一个Lucene的Field
    public Field getField(Object entity) {
    ....
    }
}



IndexManager

索引管理类,负责创建、更新、删除索引。
public class IndexManager {
	private String indexDir;
	//对应于实体对象的除主键外的其他属性
	private Map fieldAttributeMap = new   HashMap();
	//对应于实体对象的主键
	private FieldAttribute keyFieldAttribute;
	private Analyzer analyzer;
      ...................
	/**
	 * 创建索引
	 * @param entities
	 */
	public synchronized void createIndex(E[] entities) {
		.....
	}
	/**
	 * 添加索引
	 * @param entities
	 */
	public synchronized void addIndex(E[] entities) {
		......
	}
	/**
	 * 添加索引
	 * @param entitie
	 */
	@SuppressWarnings("unchecked")
	public synchronized void addIndex(E entity) {
		.....
	}
	/**
	 * 删除索引
	 * @param entity
	 */
	public synchronized void deleteIndex(E entity){
		......
	}
	/**
	 * 更新索引
	 * @param entity
	 */
	public synchronized void updateIndex(E entity){
		..........
	}
}

分享到:
评论
3 楼 jander 2008-06-05  
xly_971223 写道
直接用hibernate search更直接

用Hibernate是简单了,但不通用!
不是什么场合都用Hibernate的。
2 楼 cowskin 2008-06-05  
感觉抛开pojo后,看起来就清晰了
1 楼 xly_971223 2008-06-04  
直接用hibernate search更直接

相关推荐

    lucene 4.7.2 Demo

    在索引管理方面,Lucene 4.7.2提供了对索引的增删改操作。新增文档只需添加新的Document到IndexWriter,删除操作则通过Term或Query指定删除条件,修改则涉及读取旧文档、更新Field并重新写入。这些操作都需要谨慎...

    lucene索引入门[归类].pdf

    lucene索引入门 Lucene 是一个基于 Java 的全文搜索引擎库,提供了一个简单、灵活、可扩展的搜索解决方案。Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index)...

    基于Lucene的Oracle数据库全文检索.pdf

    Lucene的优点在于其跨平台和简单易用等特点,已经吸引了众多的用户群体。 Lucene的架构提供了完整的查询引擎和索引引擎,部分文本分析引擎,能够满足各种应用场景的需求。 在基于Lucene的Oracle数据库全文检索中,...

    Compass+ lucene 通用代码(脱离数据库)

    在Compass中,我们定义了`Mapping`来描述如何将应用程序中的对象映射到Lucene索引。例如,`applicationContext-compass.xml`配置文件就是用来配置Compass与应用程序数据源的桥梁。在这个XML文件中,你可以定义数据源...

    Lucene与关系型数据库对比

    Lucene的设计核心是索引机制,它将信息存储为一系列索引文件,这些文件的结构设计得十分通用,类似于数据库的表、记录和字段。这使得Lucene能够方便地与传统的文件或数据库系统进行映射,被视为支持全文检索的...

    Lucene简介.介绍

    Lucene 的 API 设计得非常通用,可以方便地处理各种数据源,如文件或数据库记录,将其映射为类似于数据库表格的结构。每个需要索引的单元称为 `Document`,它由多个 `Field` 组成,每个 `Field` 表示文档中的不同...

    Lucene的系统结构

    - `org.apache.lucene.index`: 索引管理,包括创建、更新和删除索引,使用倒排索引实现快速的文本查找。 - `org.apache.lucene.queryParser`: 处理查询语法,解析用户输入的查询表达式,支持布尔运算符。 - `...

    Lucene应用中Pdf文档文本数据提取方法研究

    3. **将提取的文本整合到Lucene索引**: 一旦文本数据被提取,接下来就是将这些文本信息整合到Lucene的Document对象中,以便进行后续的索引构建和搜索操作。这通常涉及将文本数据转换成适合Lucene索引的格式,并通过...

    Lucene测试程序3.5

    标准分词器(StandardAnalyzer)是Lucene提供的一种通用分析器,适用于大多数西文语言。它包含了一个标准分词器(StandardTokenizer)、一个标准过滤器(StandardFilter)以及一些其他过滤器,如字母数字转换过滤器...

    lucene2.9开发指南

    - **store**:管理索引的存储,如FSDirectory和RAMDirectory分别对应文件系统和内存中的存储。 - **document**:定义了文档和域的数据结构。 - **search**:实现索引的搜索,IndexSearcher和Query类是主要的搜索...

    Lucene 5 主要jar包

    2. **lucene-analyzers-common-5.0.0.jar**:这个包包含了Lucene的通用分析器,用于将输入的文本转化为可搜索的 tokens。分析器的作用是处理各种语言的文本,进行分词、去除停用词、词形还原等预处理工作,以便更好...

    Lucene搜索技术

    - **org.apache.lucene.index**:负责索引的创建和管理,是索引入口。 - **org.apache.lucene.queryParser**:解析查询字符串,生成可供搜索的查询对象。 - **org.apache.lucene.analysis**:包含语言分析器,用于...

    Lucene in Action英文版

    - **基本索引API**:使用Lucene进行索引时,需要了解其核心类`IndexWriter`,它用于创建和更新索引。此外,还需要了解`Document`对象和`Field`对象,它们分别表示单个文档及其字段。 - **基本搜索API**:为了执行...

    基于Lucene的中型搜索引擎(C#)

    - **建立索引**:将处理后的文本数据转换为Lucene的倒排索引,用于快速查找。 - **查询处理**:解析用户输入的查询,生成相应的查询对象。 - **搜索执行**:使用查询对象在索引中查找匹配的文档,计算相关性评分。 -...

    Java全文检索引擎Lucene的应用.pdf

    尽管Lucene本身并不是一个完整的全文索引应用程序,但它提供了一套完整的查询引擎和索引引擎,实现了一些通用的分词算法,并预留了许多词法分析器接口,使得用户可以根据自己的需求进行扩展。此外,由于Lucene是用...

    Lucene.docx

    在【全文检索的实现】方面,Lucene提供了一个通用的API接口,使得数据可以轻松地从传统文件或数据库映射到Lucene的索引结构。与传统的数据库相比,Lucene的索引过程更专注于全文搜索,而非结构化查询。Lucene的索引...

    开发自己的搜索引擎 lucene + heritrix

    Lucene 能够实现包括数据索引、查询分析、排序和高亮显示等搜索功能。它还能够进行复杂的查询操作,例如布尔查询、短语查询、范围查询等。 在构建搜索引擎时,我们需要首先使用网络爬虫技术抓取互联网上的数据。...

    lucene 最新版本所有jar包

    `lucene-analyzers-common-4.10.2.jar`是Lucene的通用分析器包。分析器是处理文本的关键组件,它负责将原始文本转换为可以被索引和搜索的标准化形式。这个包中包含多种语言的分析器,如英文、法文、德文等,它们能...

    Lucene.Net2.3源码,最新版

    例如,可能包括一些与索引、查询解析或分析相关的通用工具类。 4. **AssemblyInfo.cs** 这是 .NET 编译器用来生成程序集信息的元数据文件,包含版本信息、版权、公钥标记等。在 Lucene.Net 中,它可能用于定义库的...

Global site tag (gtag.js) - Google Analytics