Eric Gross
2006-Oct-31 09:02 UTC
[Ferret-talk] conditional boost? friends to come up at top of search...
Hey guys, im trying to get my friends to come up at the top of the act as ferret search. I would query the whole result set first, then move my friends to the top, but the thing is, Im paginating my results and use the offset and limit parameters in the multi_search() function. Anyone know how to do this? Thanks in advance... -- Posted via http://www.ruby-forum.com/.
Jens Kraemer
2006-Nov-01 13:05 UTC
[Ferret-talk] conditional boost? friends to come up at top of search...
On Tue, Oct 31, 2006 at 10:02:50AM +0100, Eric Gross wrote:> Hey guys, im trying to get my friends to come up at the top of the act > as ferret search. I would query the whole result set first, then move my > friends to the top, but the thing is, Im paginating my results and use > the offset and limit parameters in the multi_search() function. > > Anyone know how to do this?We''d need some more info on how you store your friend-of-relationship, and how your index looks like (i.e. what fields does it contain). cheers, Jens -- webit! Gesellschaft f?r neue Medien mbH www.webit.de Dipl.-Wirtschaftsingenieur Jens Kr?mer kraemer at webit.de Schnorrstra?e 76 Tel +49 351 46766 0 D-01069 Dresden Fax +49 351 46766 66
Eric Gross
2006-Nov-07 18:01 UTC
[Ferret-talk] conditional boost? friends to come up at top of search..
ok for the user, for now i am only indexing the users full name, i have class User < ActiveRecord::Base acts_as_ferret :store_class_name => true, :fields => { :full_name => { :boost => 3 }} has_and_belongs_to_many :friends,:class_name=>"User", :join_table=> "friends_users",:association_foreign_key => "friend_id", :after_add => :become_friend_to_friend,:after_remove=> :remove_user_as_friend so thats pretty much all there is there. The thing is Im calling the search as a multisearch - User.multisearch(query,[ Book ], (with :limit and :offset)). Jens Kraemer wrote:> On Tue, Oct 31, 2006 at 10:02:50AM +0100, Eric Gross wrote: >> Hey guys, im trying to get my friends to come up at the top of the act >> as ferret search. I would query the whole result set first, then move my >> friends to the top, but the thing is, Im paginating my results and use >> the offset and limit parameters in the multi_search() function. >> >> Anyone know how to do this? > > We''d need some more info on how you store your friend-of-relationship, > and > how your index looks like (i.e. what fields does it contain). > > cheers, > Jens > > -- > webit! Gesellschaft f?r neue Medien mbH www.webit.de > Dipl.-Wirtschaftsingenieur Jens Kr?mer kraemer at webit.de > Schnorrstra?e 76 Tel +49 351 46766 0 > D-01069 Dresden Fax +49 351 46766 66-- Posted via http://www.ruby-forum.com/.
Caspar
2006-Nov-08 10:15 UTC
[Ferret-talk] conditional boost? friends to come up at top of search..
Hi i have a similar thing in my search results. I have sponsored listings appearing above other results. This is done with a simple sponsored boolean flag and a sort field that orders by sponsored and then score. regards caspar -- Posted via http://www.ruby-forum.com/.
Eric Gross
2006-Nov-08 10:34 UTC
[Ferret-talk] conditional boost? friends to come up at top of search..
hey caspar, im having trouble understanding what you mean. Could you show me some of your code? I dont know what you mean by sponsored boolean flag and a sort field. Any examples would be highly appreciatied. -- Posted via http://www.ruby-forum.com/.
Caspar
2006-Nov-08 10:54 UTC
[Ferret-talk] conditional boost? friends to come up at top of search..
Okay firstly the sponsored listings are what we call the paid for premier style of listing in our site. In the listings db table there are a few fields that describe the sponsored feature. Ferret is used to index one of them which is a boolean called sponsored which simple defines a listing as being sponsored. Ferret doesn''t know (as far as I''m aware..) how to compare booleans so you need this declaration somewhere in your model. Which tells ferret how to handle boolean comparrisons. def false.<=>(o) o ? -1 : 0 end def true.<=>(o) !o ? 1 : 0 end Then it''s just a case of defining your sort fields and then using them in your ferret search like so. sort_fields = [] sort_fields << Ferret::Search::SortField.new(:sponsored, :reverse => :true) sort_fields << Ferret::Search::SortField::SCORE results = VoObject.find_by_contents(query,:sort =>sort_fields,:offset=>page,:limit => RESULTS_PER_PAGE) I''m a rank amateur when it comes to ruby/rails/ferret so please don''t take this as the right/best way to do it, but it works for me. Hope this helps. Regards Caspar -- Posted via http://www.ruby-forum.com/.