【发布时间】:2011-08-11 19:39:39
【问题描述】:
我在使用 Sunspot 时按组搜索时遇到了一些问题。
这是一个例子:
# == Schema Information
#
# Table name: movies
#
# id :integer(4) not null, primary key
# title :string(255)
class Movie < ActiveRecord::Base
has_and_belongs_to_many :actors
searchable do
text :title
integer :ages, multiple: true do
actors.map(&:age)
end
text :names, multiple: true do
actors.map(&:name)
end
end
end
# == Schema Information
#
# Table name: actors
#
# id :integer(4) not null, primary key
# name :string(255)
# age :integer(30)
class Actor < ActiveRecord::Base
has_and_belongs_to_many :movies
searchable do
integer :age
text :name
end
end
我想找出每部电影都有一位名叫约翰的 30 岁演员。
Movie.search do
with(:names).equal_to("John")
with(:ages).equal_to(30)
with(:title).equal_to("...")
# ...
end
问题在于它可能会找到一部有两个演员的电影;一个叫约翰,一个 30 岁。有没有办法以某种方式将它们组合在一起,以便找到的电影有一个 30 岁的演员叫约翰?
【问题讨论】:
-
您的配置文件中有一个选项可以控制您的条件如何使用
OR或AND形成“where”子句(将其修改为 AND 以获得您想要的) -
@Octopus-Paul 这不是问题。我可以使用
all_of块来实现您所说的。问题是一部电影可以有不止一个演员,这意味着它可能会找到一部演员在 30 岁时和另一部名叫约翰的电影。 -
您在错误的地方搜索,您应该在寻找演员,因为您正在尝试寻找演员而不是电影。让你的 actor 模型可以通过 solr 搜索并在其上进行搜索。
-
@Maurício Linhares 我不确定我应该对一群演员做什么。最后,我仍然需要一个电影列表。
-
跟我想一想,你想找到所有演员年龄在 30 岁并叫约翰的电影。如果您找到一位名叫约翰的 30 岁演员,他的所有电影都符合您的条件。
标签: ruby-on-rails ruby solr sunspot