On 6/1/06, Jake S. [email protected] wrote:
and now find all the items from a certain store or category
???
end
Hi Jake,
I’d do the whole thing through Ferret;
items = Item.find_by_contents(search_text, :sort => ["title",
“price”])
I’m not sure what your SQL query is but I’m pretty sure it could be
handled in Ferret. Let’s say you wanted to get all times with the
subject of “Ruby” or “Rails”. Instead of;
items_from_sql = Item.find_by_sql("SELECT * items WHERE subject =
‘Ruby’ OR subject = ‘Rails’")
You’d do this;
items = Item.find_by_contents(search_text + " +subject:(Ruby
Rails)",
:sort => [“title”, “price”])
Or even better if speed is important, you could use a QueryFilter;
# first you'd create a FILTER constant
# NOTE: since we are creating the query directly we need to
lowercase the
# terms which would usually be done by the QueryParser
bq = BooleanQuery.new()
bq.add_query(TermQuery.new(Term.new(“subject”, “ruby”),
BooleanClause::Occur::Should)
bq.add_query(TermQuery.new(Term.new(“subject”, “rails”),
BooleanClause::Occur::Should)
FILTER = QueryFilter.new(bq)
def advanced_search(search_text, store, format, sortby)
items = Item.find_by_contents(search_text,
:filter => FILTER,
:sort => ["title", "price"])
#...
end
Hope that helps. Of course sorting arrays is easy to.
@list.sort! do |a, b|
cmp = (a.title <=> b.title)
if cmp == 0
cmp = (a.price <=> b.price)
end
next cmp
end
Cheers,
Dave