思考狮身人面像::狮身人面像错误索引 item_core,item_delta:查询错误:在架构中找不到'deleted_at'字段



我有一个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。我的数据库被迁移了,表itemsdeleted_at列。

schema.rb:

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

这里有几个相关的问题:

  • 您已经获得了一个具有相同名称的属性和字段(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}

相关内容

  • 没有找到相关文章