2012-08-09 66 views
1

我正在关注使用Lucene 3.6的Lucene TutorialLucene可以将任意对象附加(或至少跟踪)到文档吗?

我可以在Document对象上创建并执行搜索,但我想要取回用于创建Document s的原始对象。不幸的是,Lucene似乎在对Document进行序列化/反序列化,所以我一直无法在它们之间创建查找映射。

如何保持Lucene的Document和我的Object之间的关系?有没有一种首选的Lucene方法呢?

我要指出,本教程没有工作对我来说是盒子,我不得不创建/安装的Document年代后,以添加一个调用IndexWriter.commit()我也有拨打电话到IndexWriterConfig.setMaxBufferedDocs()IndexWriterConfig.setRAMBufferSizeMB()与大数字阻止Lucene在硬盘上寻找。

+2

您需要以某种方式唯一标记您的可搜索对象,例如由一个ID,并在稍后引用该ID。只需将ID保存为未编入索引的“文档”即可。 – 2012-08-09 13:24:05

+0

会有一个'Field'适合那个吗? – fommil 2012-08-09 13:59:18

+0

是的。在我的一个应用程序中,我有一个id字段,我将其添加为'doc.add(new Field(“id”,object.getId()。toString(),Field.Store.YES,Field.Index.NOT_ANALYZED)); ' – 2012-08-09 14:08:48

回答

3

首先,您需要对原始对象的唯一引用。如果您的对象是数据库中的行,您可以使用主键,假设它是唯一的ID

其次,创建可搜索的Document■当,只需添加一个字段像

doc.add(new Field("id", object.getId().toString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 

以后,您可以检索找到的文档这一领域并检索根据id原始文档(数据库条目)。

如果您可能有不同的文档类型,例如数据库条目和PDF,只需以相同的方式保存文档类型,就可以以不同方式处理不同类型的文档。

相关问题