2009-01-04 37 views
7

假设我有一个包含许多名称的数据库表。我想对这些名字进行“弹性匹配”。我不确定“弹性匹配”是否适合使用,但现在就让我们继续。关于“模糊匹配”,已经有similardiscussions,但我对语音匹配没有真正的兴趣。我对我所谓的有序子集匹配感兴趣。Flex匹配许多数据库记录(类似Quicksilver或Launchy的匹配)

我希望它能像QuickSilver(OSX)或Launchy(Windows)一样工作。以下是比赛的一个给定的搜索字符串的几个例子:

MIT中号 assachusetts nstitute的牛逼李有成
ffox˚F愤怒狐狸
osx⇒Mac OS X
毫秒中号 ICRO 小号经常总公司

我的最终目标是拥有一个网页与服务器驱动的数据自动完成文本字段。

我相信通过结合jQuery LiveUpdate和/或jQuery QuickSelect的功能,我可以在客户端获得足够的结果。

我需要帮助的是如何最好地处理服务器端对大表的弹性匹配。我对如何使用Quicksilver scoringalgorithm以及一些置换索引逻辑来构建我自己的自定义索引有一些想法,但我宁愿不重新发明轮子,如果有其他可用的话。

总结:什么是获得与多行数据库表快速弹性匹配的最佳方法是什么?

回答

4

这并没有直接回答我的问题,但这个项目我的工作,我意识到,我只是没有需要这个尚未服务器端组件。为了方便我的web应用程序的客户端,我刚刚推出了两个新的开源项目:

  • LiquidMetal:这是一个水银般的得分算法,对分数的缩写字符串。建立索引时很有用。
  • Flexselect:一个jQuery插件,可以将选择框转换为弹性匹配增量发现控件。把它想象成Quicksilver散布在一个选择框中。它使用LiquidMetal来过滤和排序实时结果。
+0

+1。 – 2010-05-12 04:54:34

1

一种方法是只做LIKE匹配。在每个字符之间插入一个%,然后在字符串之前和之后放入一个%,然后根据该字符进行搜索。很显然,这会拉ms像'm ultimedia s ystems',但你可能可以将它与另一个包含'建议'匹配的表,并按这些排序。

+0

是的,我给出了一些想法,但它肯定不适合大型桌子。这将需要全表扫描。它也没有评分结果。单词的连续字符和首字母应该高于随机子集。对于Flexselect,为 – 2009-01-06 02:11:46