Сократить условия автозаполнения - PullRequest
0 голосов
/ 22 декабря 2009

У меня очень большой список терминов для использования в поле автозаполнения. Я размышлял над несколькими различными сценариями того, как их обрезать, но я еще ничего не придумал.

По сути, структура очень похожа на звукозаписывающую компанию -

  • У исполнителя есть альбомы В альбоме есть песни
  • Отдельные песни могут быть популярны, альбомы в основном являются суммами их основной популярности песни
  • Альбомы также содержат очень различное количество песен - поэтому, если в альбоме сотни песен, очень вероятно, что кто-то захочет его найти, и гораздо реже если у него меньше песен
  • Поскольку автозаполнение становится более конкретным (больше букв), я бы хотел, чтобы менее вероятные термины отображались

Я думаю примерно так:

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 ]

4 голосов
/ 22 декабря 2009

Я только что опубликовал реализацию автозаполнения на стороне сервера в Google Code. Проект включает в себя библиотеку Java, которая может быть интегрирована в существующие приложения, и автономный сервер автозаполнения HTTP AJAX. Пинайте шины!

1 голос
/ 22 декабря 2009

Этот алгоритм нелегко реализовать, поскольку вы пытаетесь проиндексировать структуру данных двумя способами - лексикографически и по популярности.

Один из способов сделать это - создать сжатый набор песен, где на каждом узле вы сохраняете предварительно составленный список из N самых популярных песен, начиная с этого префикса. Это заняло бы много места (O (NUM_SONGS * N)), но позволило бы быстрый поиск (O (PREFIX)).

1 голос
/ 22 декабря 2009

Вы можете попробовать автозаполнение закрытия попробовать.

...