How do I set up a facet search with a many to many relationship using Sunspot?

我们两清 提交于 2019-12-03 05:17:43

问题


I haven't implemented a search feature before and feel a bit stuck. I have a Sunspot search feature which finds results based on keywords - this works great - but I now want to implement the multi select facet feature, but I can't even seem to figure out how to set-up a basic facet search.

I have a many to many relationship (in rails not in real life):

Class People has_many :skills, :through => experience (and vice versa etc)

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

  searchable do
    text :first_name, :surname
  end
end

In the controller

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

This is the basic example I can't get working. It generates this error:

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

How do I create the link to :skill_ids

I think I must be missing some reference in the model - but no examples I can find do reference the Ids of a relationship. Most of the examples I found use columns that are already in that model when using the facet functionality.

  • How can I get the basic implementation working?
  • How would I use this in the view - do I have to call hits.facet and iterate over the skills? What would the code look like to display this?
  • How would I select multiple facets to search by?
  • Should I put this in the community wiki?

Thank you for your time!


回答1:


Anything you want to filter, facet, or order on, Sunspot needs to know about. So in your model:

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

Your #search call in your controller looks right. In your view, you'd do something along these lines:

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

row.instance will return the instance of Skill that the row's value refers to (that's what the :references option is doing in the searchable definition).

I'm not sure what you mean by "select multiple facets to search by" -- one can generate multiple facets (which give users choices for further search refinement) by calling the facet method multiple times in a search; and you can then use their facet choices with scope restrictions using the with method, which you can also call as many times as you'd like.

Speaking of wikis, most of this information is available (with more explanation) in the Sunspot wiki:

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


来源:https://stackoverflow.com/questions/2522231/how-do-i-set-up-a-facet-search-with-a-many-to-many-relationship-using-sunspot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!