2010-03-11 97 views
5

我正在從Lucene.Net的數據庫索引一行數據。一行相當於Document。如何在Lucene索引中添加文檔時獲取DocId?

我想用DocId更新我的數據庫,這樣我就可以在結果中使用DocId來快速檢索行。

我目前首先從結果文檔中檢索PK,我認爲它應該比使用DocId直接從數據庫中檢索要慢。

如何在將文檔添加到Lucene時找到DocId?

回答

2

正如Yuval所言,泄漏內部Lucene實現細節是不好的,特別是因爲當索引發生變化時Lucene doc id發生變化。

如果使用doc.get(「pk」)查找主鍵對您而言太慢,請使用FieldCache將所有pk緩存在內存中。然後查找將會很快。

+0

任何使用FieldCache的示例代碼片段? – Rohit 2010-03-12 20:37:52

+0

我同意依靠doc ID幾乎總是糟糕的設計。然而,我有一個特殊的用例,在這個用例中,我有一個只讀索引,並且需要在搜索查詢的可能之外做一些處理,所以我需要存儲某些文檔的文檔ID以供以後參考。你能否詳細說明如何使用FieldCache? – Lyle 2010-06-09 15:02:16

3

依賴於Lucene的DocId是一個糟糕的政策,因爲即使Lucene也試圖避免這種情況。我建議你創建你自己的DocId。在數據庫中,我會使用auto-increment field。如果您的應用程序不使用關係數據庫,則可以以編程方式創建這種類型的字段。除此之外,我建議你閱讀Search Engine versus DBMS - 我相信只有可能被搜索的字段應該存儲在Lucene中;該行的其餘部分屬於數據庫,所以事件的順序是:

  1. 使用Lucene,搜索一些文本並獲取DocId。
  2. 使用DocId從數據庫中檢索完整行。