浏览 3366 次
锁定老帖子 主题:简单、通用的Lucene 索引管理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-04
一般我们存储在数据库中的数据,都可以由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){ .......... } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-04
直接用hibernate search更直接
|
|
返回顶楼 | |
发表时间:2008-06-05
感觉抛开pojo后,看起来就清晰了
|
|
返回顶楼 | |
发表时间:2008-06-05
xly_971223 写道 直接用hibernate search更直接
用Hibernate是简单了,但不通用! 不是什么场合都用Hibernate的。 |
|
返回顶楼 | |