我有一个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"
这里有几个相关的问题:
- 您已经获得了一个具有相同名称的属性和字段(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}