目的
一般我们存储在数据库中的数据,都可以由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){
..........
}
}
分享到:
相关推荐
在索引管理方面,Lucene 4.7.2提供了对索引的增删改操作。新增文档只需添加新的Document到IndexWriter,删除操作则通过Term或Query指定删除条件,修改则涉及读取旧文档、更新Field并重新写入。这些操作都需要谨慎...
lucene索引入门 Lucene 是一个基于 Java 的全文搜索引擎库,提供了一个简单、灵活、可扩展的搜索解决方案。Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index)...
Lucene的优点在于其跨平台和简单易用等特点,已经吸引了众多的用户群体。 Lucene的架构提供了完整的查询引擎和索引引擎,部分文本分析引擎,能够满足各种应用场景的需求。 在基于Lucene的Oracle数据库全文检索中,...
在Compass中,我们定义了`Mapping`来描述如何将应用程序中的对象映射到Lucene索引。例如,`applicationContext-compass.xml`配置文件就是用来配置Compass与应用程序数据源的桥梁。在这个XML文件中,你可以定义数据源...
Lucene的设计核心是索引机制,它将信息存储为一系列索引文件,这些文件的结构设计得十分通用,类似于数据库的表、记录和字段。这使得Lucene能够方便地与传统的文件或数据库系统进行映射,被视为支持全文检索的...
Lucene 的 API 设计得非常通用,可以方便地处理各种数据源,如文件或数据库记录,将其映射为类似于数据库表格的结构。每个需要索引的单元称为 `Document`,它由多个 `Field` 组成,每个 `Field` 表示文档中的不同...
- `org.apache.lucene.index`: 索引管理,包括创建、更新和删除索引,使用倒排索引实现快速的文本查找。 - `org.apache.lucene.queryParser`: 处理查询语法,解析用户输入的查询表达式,支持布尔运算符。 - `...
3. **将提取的文本整合到Lucene索引**: 一旦文本数据被提取,接下来就是将这些文本信息整合到Lucene的Document对象中,以便进行后续的索引构建和搜索操作。这通常涉及将文本数据转换成适合Lucene索引的格式,并通过...
标准分词器(StandardAnalyzer)是Lucene提供的一种通用分析器,适用于大多数西文语言。它包含了一个标准分词器(StandardTokenizer)、一个标准过滤器(StandardFilter)以及一些其他过滤器,如字母数字转换过滤器...
- **store**:管理索引的存储,如FSDirectory和RAMDirectory分别对应文件系统和内存中的存储。 - **document**:定义了文档和域的数据结构。 - **search**:实现索引的搜索,IndexSearcher和Query类是主要的搜索...
2. **lucene-analyzers-common-5.0.0.jar**:这个包包含了Lucene的通用分析器,用于将输入的文本转化为可搜索的 tokens。分析器的作用是处理各种语言的文本,进行分词、去除停用词、词形还原等预处理工作,以便更好...
- **org.apache.lucene.index**:负责索引的创建和管理,是索引入口。 - **org.apache.lucene.queryParser**:解析查询字符串,生成可供搜索的查询对象。 - **org.apache.lucene.analysis**:包含语言分析器,用于...
- **基本索引API**:使用Lucene进行索引时,需要了解其核心类`IndexWriter`,它用于创建和更新索引。此外,还需要了解`Document`对象和`Field`对象,它们分别表示单个文档及其字段。 - **基本搜索API**:为了执行...
- **建立索引**:将处理后的文本数据转换为Lucene的倒排索引,用于快速查找。 - **查询处理**:解析用户输入的查询,生成相应的查询对象。 - **搜索执行**:使用查询对象在索引中查找匹配的文档,计算相关性评分。 -...
尽管Lucene本身并不是一个完整的全文索引应用程序,但它提供了一套完整的查询引擎和索引引擎,实现了一些通用的分词算法,并预留了许多词法分析器接口,使得用户可以根据自己的需求进行扩展。此外,由于Lucene是用...
在【全文检索的实现】方面,Lucene提供了一个通用的API接口,使得数据可以轻松地从传统文件或数据库映射到Lucene的索引结构。与传统的数据库相比,Lucene的索引过程更专注于全文搜索,而非结构化查询。Lucene的索引...
Lucene 能够实现包括数据索引、查询分析、排序和高亮显示等搜索功能。它还能够进行复杂的查询操作,例如布尔查询、短语查询、范围查询等。 在构建搜索引擎时,我们需要首先使用网络爬虫技术抓取互联网上的数据。...
`lucene-analyzers-common-4.10.2.jar`是Lucene的通用分析器包。分析器是处理文本的关键组件,它负责将原始文本转换为可以被索引和搜索的标准化形式。这个包中包含多种语言的分析器,如英文、法文、德文等,它们能...
例如,可能包括一些与索引、查询解析或分析相关的通用工具类。 4. **AssemblyInfo.cs** 这是 .NET 编译器用来生成程序集信息的元数据文件,包含版本信息、版权、公钥标记等。在 Lucene.Net 中,它可能用于定义库的...