Friday, May 1, 2009

Search engine like function?

I am building a data warehouse site that contains a lot of customer info. I
need to allow users of my app to have a search page that lets them enter
natural search strings to find and narrow search results.

I wanted each word on the search field to be treated as AND clause in my
search. I also need the search to act like full text where multiple fields
are considered for a match. I also have a special case whereas a numeric
keyword is treated special and only certain fields are searched in that
case.

Examples:

Keyword: dave
Searches: ( `User`.`name` like '%dave%' OR `User`.`email` like '%dave%' )

Keyword: dave thomas
Searches: ( ( `User`.`name` like '%dave%' OR `User`.`email` like '%dave%' )
AND ( `name` like '% thomas%' OR `email` like '% thomas%' ) )

Keyword: 341
Searches: ( `User`.`id` = '341' )

I have written a model function that divides the keywords into an array and
creates an array of conditions that I pass to the find() command. This works
great.

However this feels like a very common pattern, and I wonder if I just
reinvented the wheel? Sooner or later I will be asked to add special keyword
handlers such as:

dave OR thomas
dave AND thomas
"dave thomas"
"dave thomas" OR "david thomas"

Is there already a cake pattern or helper that exists that I should be
using? If not I may just create one for the good of the community.
--
View this message in context: http://n2.nabble.com/Search-engine-like-function--tp2753945p2753945.html
Sent from the CakePHP mailing list archive at Nabble.com.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments: