如何使用太阳黑子设置具有多对多关系的方面搜索?

时间:2010-03-26 09:43:01

标签: ruby-on-rails search many-to-many faceted-search sunspot

我之前没有实现过搜索功能,感觉有些卡住了。我有一个太阳黑子搜索功能,可以根据关键字找到结果 - 这很有效 - 但我现在想要实现多选方面功能,但我似乎无法弄清楚如何设置基本方面搜索。 / p>

我有很多关系(在现实生活中没有轨道):

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并迭代技能?代码看起来会是什么样的?
  • 如何选择多个方面进行搜索?
  • 我应该把它放在社区wiki中吗?

感谢您的时间!

1 个答案:

答案 0 :(得分:14)

您要过滤,分面或订购的任何内容,太阳黑子需要了解。所以在你的模型中:

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选项所执行的操作。)

我不确定“选择多个方面进行搜索”是什么意思 - 可以通过调用{{1来生成多个方面(通过用户选择进行进一步搜索)来生成多个方面}}方法在搜索中多次;然后,您可以使用facet方法使用带有范围限制的方面选项,您也可以根据需要多次调用。

说到wiki,太阳黑子wiki中提供了大部分信息(有更多解释):