2012-08-09 68 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,只需以相同的方式保存文檔類型,就可以以不同方式處理不同類型的文檔。

相關問題