修剪自动完成条款

时间:2009-12-22 06:15:12

标签: javascript autocomplete prototypejs scriptaculous

我有一个非常大的术语列表,可以在自动完成框中使用。我一直在考虑如何修剪它们的几种不同场景,但我还没有想出任何好的东西。

基本上,结构与唱片标签非常相似 -

  • 艺术家有专辑“专辑有歌曲”
  • 个人歌曲可能很受欢迎,专辑主要是他们潜在的歌曲流行度的总和
  • 专辑中也有大量可变的歌曲 - 所以如果一张专辑有数百首歌曲,很可能有人想要搜索它,而且不太可能 如果它的歌曲较少
  • 随着自动填充变得更具体(更多字母),我希望显示的条款不太可能

我在想这样的事情:

Apple   10
Banana  10
Crab    20
Diner   30
Dish    20
Daily   10
Diver   20
Dice    10

如果这是专辑列表,并且我分配了它们的“得分”,我只是根据我显示的列表的长度(例如3)然后按分数 - 我点击“弹出选择列表” D“上面,”Diner“,”Dish“和”Diver“出现,然后”i“,它变成”Diner“,”Dish“和”Diver“。

有没有特定的算法可以做到这一点?或者为此构建的AJAX自动完成程序?我目前正在使用Prototype / Scriptaculous,但我似乎无法正确使用它。

3 个答案:

答案 0 :(得分:4)

我刚在Google Code上发布了server-side autocomplete implementation。该项目包括一个可以集成到现有应用程序中的Java库和一个独立的HTTP AJAX自动完成服务器。踢轮胎!

答案 1 :(得分:1)

您可以尝试closure autocomplete

答案 2 :(得分:1)

这不是一个容易实现的算法,因为您试图以两种方式索引数据结构 - 按字典顺序和受欢迎程度。

这样做的一种方法可能是制作compressed trie首歌曲,其中每个节点都存储一个以该前缀开头的N个最流行歌曲的预建列表。这将占用大量存储空间(O(NUM_SONGS * N)),但允许快速查找(O(PREFIX))。