ruby-on-rails – 如何使用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并迭代技能?显示代码代码是什么样的?
>如何选择多个方面进行搜索
>我应该把它放在社区维基中吗?

感谢您的时间!

解决方法@H_403_29@
您要过滤,分面或订购的任何内容,太阳黑子需要了解.所以在你的模型中:
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选项在可搜索的定义中执行的操作).

我不确定你的意思是“通过选择多个方面进行搜索” – 通过在搜索中多次调用facet方法,可以生成多个方面(为用户提供进一步搜索优化的选择);然后,您可以使用with方法使用带有范围限制的facet选项,您也可以根据需要多次调用.

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

> http://wiki.github.com/outoftime/sunspot/

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...