Comment mettre en œuvre la saisie semi-automatique sur un massif de dataset

Je suis en train de mettre en place quelque chose comme Google suggérer sur un site, je suis en bâtiment et je suis curieux de savoir comment le faire sur un très vaste ensemble de données. Bien sûr, si vous avez 1000 points vous mettre en cache les éléments et juste de la boucle à travers eux. Mais comment voulez-vous faire lorsque vous avez un million d'articles? En outre, supposons que les éléments ne sont pas un seul mot. Plus précisément, j'ai été vraiment impressionné par Pandora.com. Par exemple, si vous recherchez "humide", il apporte de retour "Sable Mouillé", mais il apporte aussi de retour de Toad The Wet Pignon. Et leur saisie semi-automatique est RAPIDE. Ma première idée était de regrouper les éléments par les deux premières lettres, de sorte que vous auriez quelque chose comme:

Dictionary<string,List<string>>

où les clés sont les deux premières lettres. C'est OK, mais si je veux faire quelque chose de similaire à Pandora et permettre à l'utilisateur de voir les résultats qui correspondent au milieu de la chaîne? Avec mon idée: Humide ne serait jamais de match de Toad the Wet Pignon car il serait dans le "au seau" au lieu de "NOUS" seau. Alors peut-être que vous pourrait fractionner la chaîne et de "Toad the Wet Pignon" aller dans le "À", "NOUS" et "SP" seaux (bande le mot "LA"), mais quand vous parlez d'un million d'entrées qui peuvent avoir à dire quelques mots de chacun, qui semble comme vous le feriez commencer rapidement à utiliser beaucoup de mémoire. Ok, c'est une longue question. Pensées?

  • Pouvez-vous nous donner quelques chiffres à propos de vos données? Combien de chaîne? De longueur moyenne et le nombre moyen de mots? Quelle langue?
  • Atteindre 496 000 chaînes actuellement. Durée moyenne de 14 caractères. Nombre moyen de mots 2.3. C#. Oh, et il y a des caractères non-ascii comme Л et И
InformationsquelleAutor aquinas | 2009-03-24