2009-06-04 17 views
0

有人可以向我解釋acts_as_xapian_jobs表的內部工作嗎?acts_as_xapian工作表

我跑進與acts_as_xapian插件的問題,最近,我在那裏一直得到以下錯誤,當它創建與Xapian的索引字段的對象:

Mysql::Error: Duplicate entry 'String-2147483647' for key 2: 
INSERT INTO `acts_as_xapian_jobs` (`action`, `model`, `model_id`) 
VALUES ('update', 'String', 23730251831560) 

原來,model_id超過最大int值2147483647.解決方法是更新model_id以使用bigint。爲什麼model_id會如此巨大?通過查看acts_as_xapian_jobs的內容,似乎它會爲正在編制索引的每個字段創建一行。 瞭解如何在表中創建作業會有很大幫助。

這裏的表的抽樣:

mysql> select * from acts_as_xapian_jobs limit 5\G 
*************************** 1. row *************************** 
     id: 19 
    model: String 
model_id: 23804037900560 
    action: update 
*************************** 2. row *************************** 
     id: 49 
    model: String 
model_id: 23804037191200 
    action: update 
*************************** 3. row *************************** 
     id: 79 
    model: String 
model_id: 23804037932180 
    action: update 
*************************** 4. row *************************** 
     id: 109 
    model: String 
model_id: 23804037101700 
    action: update 
*************************** 5. row *************************** 
     id: 139 
    model: String 
model_id: 23804037722160 
    action: update 

由於提前,

阿米

回答

1

我最近發現acts_as_xapian,我一直玩了一點。看起來acts_as_xapian_jobs表格在任何時候模型改變時都會更新。然後,Xapian索引實際上在下次運行時更新rake xapian:update_index

因此,acts_as_xapian_jobs表基本上只包含模型中需要重新編制索引的記錄的ID。據我所知,只有在模型發生變化時纔會將記錄添加到表格中,因此 - 您是否更改/更新數據庫中的大量條目?這可能就是爲什麼你溢出了最大的int值。

希望這會有所幫助!

+0

感謝@Feross的回覆。這是前一段時間,如果我沒有記錯,我使用的是acts_as_xapian的分叉版本,並且在切換到原始版本後它工作正常。從那以後它一直在努力! – Grnbeagle 2010-03-12 15:44:06