9

我之前没有实现过搜索功能,感觉有点卡住了。我有一个 Sunspot 搜索功能,可以根据关键字查找结果 - 这很好用 - 但我现在想实现多选方面功能,但我什至不知道如何设置基本方面搜索。

我有一个多对多的关系(在轨道上不是在现实生活中):

Class People has_many :skills, :through => 经验(反之亦然等)

Class People < ActiveRecord::Base
  has_many :skills, :through => experience

  searchable do
    text :first_name, :surname
  end
end

在控制器中

@search = Sunspot.search(People)
   facet :skill_ids
end

这是我无法工作的基本示例。它会生成此错误:

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids'

如何创建指向 :skill_ids 的链接

我想我一定是在模型中遗漏了一些参考——但我找不到任何例子可以参考关系的 ID。我发现的大多数示例在使用构面功能时都使用了该模型中已经存在的列。

  • 我怎样才能使基本实现工作?
  • 我将如何在视图中使用它 - 我是否必须调用 hits.facet 并迭代技能?代码会是什么样子来显示这个?
  • 我将如何选择多个方面进行搜索?
  • 我应该把它放在社区维基吗?

感谢您的时间!

4

1 回答 1

14

Sunspot 需要了解您想要过滤、刻面或订购的任何内容。所以在你的模型中:

searchable do
  text :first_name, :surname
  integer :skill_ids, :multiple => true, :references => Skill
end

您在控制器中的 #search 调用看起来是正确的。在您看来,您会按照以下方式做一些事情:

- @search.facet(:skill_ids).rows.each do |row|
  = row.instance.name

row.instance将返回该行的值所引用的 Skill 实例(这就是:references选项在searchable定义中所做的事情)。

我不确定您所说的“选择多个方面进行搜索”是什么意思——可以通过在搜索中多次调用该方法来生成多个方面(为用户提供进一步搜索细化的选择);facet然后,您可以使用该with方法使用具有范围限制的方面选择,您也可以根据需要多次调用该方法。

说到 wiki,大部分信息都可以在 Sunspot wiki 中找到(有更多解释):

于 2010-03-26T12:26:07.757 回答