有人能给我解释一下acts_as_xapian_jobs表的内部工作原理吗?
我最近遇到了一个关于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超过了最大整数值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提前谢谢你,
Amie
发布于 2010-03-12 16:22:03
我最近发现了acts_as_xapian,并且一直在尝试使用它。似乎acts_as_xapian_jobs表在任何时候更改模型时都会更新。然后,Xapian索引实际上会在下一次运行rake xapian:update_index时更新。
因此,acts_as_xapian_jobs表基本上只包含模型中需要重新索引的记录的in。据我所知,只有当您的模型发生更改时,记录才会添加到表中,所以--您是否正在更改/更新数据库中的大量条目?这可能是您溢出最大int值的原因。
希望这能有所帮助!
https://stackoverflow.com/questions/950969
复制相似问题