我正在從Lucene.Net的數據庫索引一行數據。一行相當於Document。如何在Lucene索引中添加文檔時獲取DocId?
我想用DocId更新我的數據庫,這樣我就可以在結果中使用DocId來快速檢索行。
我目前首先從結果文檔中檢索PK,我認爲它應該比使用DocId直接從數據庫中檢索要慢。
如何在將文檔添加到Lucene時找到DocId?
我正在從Lucene.Net的數據庫索引一行數據。一行相當於Document。如何在Lucene索引中添加文檔時獲取DocId?
我想用DocId更新我的數據庫,這樣我就可以在結果中使用DocId來快速檢索行。
我目前首先從結果文檔中檢索PK,我認爲它應該比使用DocId直接從數據庫中檢索要慢。
如何在將文檔添加到Lucene時找到DocId?
正如Yuval所言,泄漏內部Lucene實現細節是不好的,特別是因爲當索引發生變化時Lucene doc id發生變化。
如果使用doc.get(「pk」)查找主鍵對您而言太慢,請使用FieldCache將所有pk緩存在內存中。然後查找將會很快。
依賴於Lucene的DocId是一個糟糕的政策,因爲即使Lucene也試圖避免這種情況。我建議你創建你自己的DocId。在數據庫中,我會使用auto-increment field。如果您的應用程序不使用關係數據庫,則可以以編程方式創建這種類型的字段。除此之外,我建議你閱讀Search Engine versus DBMS - 我相信只有可能被搜索的字段應該存儲在Lucene中;該行的其餘部分屬於數據庫,所以事件的順序是:
任何使用FieldCache的示例代碼片段? – Rohit 2010-03-12 20:37:52
我同意依靠doc ID幾乎總是糟糕的設計。然而,我有一個特殊的用例,在這個用例中,我有一個只讀索引,並且需要在搜索查詢的可能之外做一些處理,所以我需要存儲某些文檔的文檔ID以供以後參考。你能否詳細說明如何使用FieldCache? – Lyle 2010-06-09 15:02:16