ThinkingSphinx :: SphinxError索引item_core,item_delta:查询错误:在架构中找不到字段'deleted_at'

时间:2013-06-18 15:30:53

标签: ruby-on-rails-3 thinking-sphinx acts-as-paranoid

我有Item型号:

class Item < ActiveRecord::Base
...
define_index do
  ...
  has deleted_at
  indexes deleted_at
end
...

然后我停止服务器,运行rake ts:rebuild && rake ts:reindex && rake ts:restart,重新启动服务器。我仍然得到错误。

触发错误的查询是:

Item.search({conditions:  {deleted_at: nil}})

怎么了?


注意:我正在使用acts_as_paranoid。我的数据库已迁移,表items的列为deleted_at

schema.rb中的某处:

...
create_table "items", :force => true do |t|
  ...
  t.datetime "deleted_at"

1 个答案:

答案 0 :(得分:2)

这里有几个相关的问题:

  • 您有一个属性和一个具有相同名称的字段(deleted_at) - 您应该使用:as选项将其别名设为不同的名称。否则,Sphinx在读取生成的SQL数据时会感到困惑。
  • 你有一个日期列作为一个字段,当几乎肯定不需要时 - 你是否希望用户通过deleted_at进行搜索,还是纯粹是你内部管理的东西?我在猜测后者。因此,请删除indexes deleted_at行。
  • 您在搜索调用中设置了一个字段条件,它应该是一个属性过滤器 - 使用:with选项完成。
  • Sphinx没有nil的概念,但应该将数据库中的NULL值转换为零。

因此,考虑到所有这些,您的索引定义应该是:

define_index do
  # ...

  has deleted_at
end

运行rake ts:rebuild以确保Sphinx了解更改并更新索引文件。

然后您的搜索电话是:

Item.search with: {deleted_at: 0}