Hi Pat,
Ah yes, i understand now why it is needed in some cases. Thinking of
it, the string attribute face case can also be optimized by using
"ids_only => true". In that case, the add_from_results method can do a
"select house_type from houses where id in {sphinx_internal_id's}"
using the sphinx_internal_id's of the matches. In that way only the
values needed would be fetched.
I'll work on a patch later. I'll let you know when that's ready for
review.
Bye!
Ward
On Sep 3, 3:26 pm, Pat Allan <[email protected]> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---