正在创建rails 3.2.18应用程序,从rails 2.3.10应用程序迁移数据。数据通过pg_dump移植并通过psql命令加载,没有任何错误。
通过thinking_sphinx索引的13个模型中出现了一些错误。整个索引中只有8.5个文档中有1个。
indexing index 'norm_core'...
ERROR: index 'norm_core': sql_range_query: ERROR: integer out of range
(DSN=pgsql://jerdvo:***@localhost:5432/fna_development).
total 1019 docs, 234688 bytes
索引文件是
ThinkingSphinx::Index.define :norm, :with => :active_record do
indexes data
indexes titolo
indexes massima
indexes numero
indexes norm_fulltext
indexes region.name, :as => :region
indexes normtype.name, :as => :normtype
has region_id
has normtype_id
has data, :as => :data_timestamp
end
我不确定data_timestamp
的最后一个元素的语法,因为它可能是遗留语法...它适用于日期字段 - 来自架构:
t.date "data"
其他型号在日期上具有相同的索引方案。但没有人产生错误
[假设该行必须更改,如果在索引或重建之前首先需要rake ts:configure
吗?]
答案 0 :(得分:2)
调试此问题的两个提示:
has
调用),运行ts:index
任务,确认它有效。然后一次一个地引入每个属性,看看哪一个导致了错误。SELECT MAX(data) FROM norms
),查看该数据是否有效以及是否在32位无符号整数的范围内。如果它是冒险进入64位int区域的外键之一,那么您可以将其指定为数据类型:
has normtype_id, :type => :bigint
如果是日期列,那么您需要通知Thinking Sphinx将日期/时间值转换为64位整数时间戳,方法是在config/thinking_sphinx.yml
中的每个必要环境中添加以下内容:
development:
64bit_timestamps: true
我想,问题的第三个来源是主键大于32位整数,但TS应检测bigint列并适当处理文档ID。当然,Sphinx也需要编译来处理64位文档ID,但我希望这是默认的(编译标志,为了参考,为--enable-id64
)。
如果这些都没有帮助......那么,好吧,我不知道原因可能是什么。