Hi Ward

In some cases, these objects are needed - when there are string facets  
based on fields. Because we can't store the values as strings (CRC'd  
to integers, which can't be reversed as far as I know), we need the  
objects to translate the values back.

Ideally, TS should be smart enough, and use :ids_only => true for  
facets that don't need the objects. If you could make your patch smart  
enough to handle these situations (with specs too, if possible),  
that'd be fantastic. Otherwise, feel free to create an issue on  
GitHub, and I'll try to get it sorted out at some point.

Cheers

-- 
Pat

On 03/09/2009, at 3:04 PM, Ward wrote:

>
> Hi,
>
> I noticed that the current implementation of faceting is instantiating
> active record instances without a real need.
>
> For example, when getting the facets for number of rooms when
> searching for sunny houses:
>
> House.facets("sunny", :facets => [:rooms]) # results in { :rooms =>
> {  3 => 66, 2 => 33 }}
>
> (So there are 66 3-room houses and 33 2-room houses)
>
> Unfortunately, per facet "result" there is also an House record
> fetched from the DB. For attributes that have a lot of different
> values, this get's ugly pretty fast, and totally unneeded.
>
> For my project i've created a quick monkey patch that solves this.
> Basically i've used the ids_only search, to make sure not instances
> are created when doing a search. Because this gives a different search
> result, I've changed the way the facet result hash is composed. I
> don't have time to fix the specs yet, I plan to do that later.
>
> Enjoy!,
>
> Ward
>
>
> ### Warning: monkey patch ahead ###############
>
> module ThinkingSphinx
>  class FacetSearch
>
>     def facet_search_options
>        config = ThinkingSphinx::Configuration.instance
>        max    = config.configuration.searchd.max_matches || 1000
>
>        options.merge(
>          :ids_only => true, #otherwise activerecord instances are
> created, we don't need those
>          :group_function => :attr,
>          :limit          => max,
>          :max_matches    => max,
>          :page           => 1
>        )
>      end
>
>      def add_from_results(facet, results)
>        results = results.results
>
>        name = ThinkingSphinx::Facet.name_for(facet)
>        self[name]  ||= {}
>
>        results[:matches].each do |match|
>
>          facet_value = match[:attributes][name.to_s]
>          facet_count = match[:attributes]["@count"]
>
>          self[name][facet_value] ||= 0
>          self[name][facet_value]  += facet_count
>        end
>      end
>
>  end
> end
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to