Assume I've got a database table with lots of names. Let me "flex match" against these names. I am unsure if "flex match" may be the proper term to make use of, but let us opt for that for the time being. There has been similar discussions on "fuzzy matching," but I am not necessarily thinking about phonetic matching. I am thinking about what I'd call purchased-subset-matching.

I wish it to work similar to QuickSilver (OSX) or Launchy (Home windows). Listed here are a couple of good examples of matches for any given search string:

durchMassachusetts Institute of Technology
osx ⇒ Mac OS X
msMicro**s**oft Corporation

My finish goal is to possess a web site by having an auto-finishing text area that's data driven in the server.

I am confident I'll get sufficient results around the client side by mixing features from jQuery LiveUpdate and/or jQuery QuickSelect.

Where I want assistance is in the proper way to handle the flex match around the server side against a sizable table. I've ideas in building my very own custom index while using Quicksilver scoring formula and perhaps some permutation index logic, but I'd rather not re-invent the wheel if another thing if easily available.

To sum up: What's the easiest method to obtain a fast flex match against a database table with lots of rows?

This does not answer my question directly, as well as the project I am focusing on, I recognized which i just did not need a server side component with this yet. To facilitate the customer side of my web application, I simply released two new free projects:

  • LiquidMetal: This can be a Quicksilver-like scoring formula that scores strings against abbreviations. Helpful when building a catalog.
  • Flexselect: a jQuery wordpress plugin that turns choose boxes into flex-matching incremental-finding controls. Think about it as being Quicksilver squooshed right into a choose box. It uses LiquidMetal to filter and sort the live results.

One way is always to simply do LIKE matches. Put a % between each character, after which pre and post the string, and check according to that. Clearly, which will pull in other activities for ms like 'multimedia systems', however, you could most likely pair by using another table that consists of 'suggested' matches, and sort by individuals too.