【问题标题】:Flex Matching Many Database Records (Quicksilver-like or Launchy-like matching)灵活匹配许多数据库记录(类似 Quicksilver 或 Launchy 的匹配)
【发布时间】:2010-09-29 12:16:44
【问题描述】:

假设我有一个包含许多名称的数据库表。我想对这些名称进行“灵活匹配”。我不确定“灵活匹配”是否是正确使用的术语,但现在让我们一起去吧。在“模糊匹配”上有similardiscussions,但我对语音匹配并不感兴趣。我对所谓的有序子集匹配感兴趣。

我希望它类似于 QuickSilver (OSX) 或 Launchy (Windows)。以下是给定搜索字符串的一些匹配示例:

mitMassachusetts IT技术研究所
ffoxFirefox
osx ⇒ Mac OS X
ms em> ⇒ Microsoft Corporation

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

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

我需要帮助的地方是如何最好地处理服务器端针对大桌子的弹性匹配。我对如何使用 Quicksilver scoring algorithm 和一些排列索引逻辑构建自己的自定义索引有一些想法,但如果有其他可用的东西,我宁愿不重新发明轮子。

总而言之: 针对具有多行的数据库表获得快速弹性匹配的最佳方法是什么?

【问题讨论】:

    标签: sql mysql database algorithm search


    【解决方案1】:

    这并不能直接回答我的问题,但是对于我正在从事的项目,我意识到我只是需要为此提供服务器端组件时间>。为了方便我的 Web 应用程序的客户端,我刚刚启动了两个新的开源项目:

    • LiquidMetal:这是一种类似于 Quicksilver 的评分算法,可以根据缩写对字符串进行评分。在构建索引时很有用。
    • Flexselect:一个 jQuery 插件,可以将选择框变成 flex-matching 增量查找控件。把它想象成 Quicksilver 挤进一个选择框。它使用 LiquidMetal 对实时结果进行过滤和排序。

    【讨论】:

      【解决方案2】:

      一种方法是只进行 LIKE 匹配。在每个字符之间放置一个 %,然后在字符串的前后放置一个 %,然后根据它进行搜索。显然,这会为 ms 引入其他内容,例如“multimedia systems”,但您可以将其与另一个包含“建议”匹配,并按这些匹配。

      【讨论】:

      • 是的,我考虑过这一点,但它肯定不能很好地适用于大型表。这将需要全表扫描。它也不会对结果进行评分。连续字符和单词的首字母应该比随机子集得分更高。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      相关资源
      最近更新 更多