Un dizionario farà il lavoro. Tuttavia, se stai eseguendo rapide corrispondenze parziali (ad es. Cerca come l'utente digita) potresti ottenere prestazioni migliori creando più chiavi che puntano allo stesso oggetto. Ad esempio, la parola "Apple" potrebbe essere posizionata con "Ap", "App", "Appl" e "Apple".
Ho utilizzato questo approccio su un numero simile di record con risultati molto buoni. Ho trasformato i miei articoli sorgente 10K in circa 50K di chiavi univoche. Ciascuna di queste voci del dizionario punta a un elenco contenente riferimenti a tutte le corrispondenze per quel termine. È quindi possibile cercare in questo elenco molto più piccolo in modo più efficiente. Nonostante il gran numero di liste create, l'impronta della memoria è abbastanza ragionevole.
È anche possibile creare le proprie chiavi se si desidera reindirizzare gli errori di ortografia comuni o scegliere elementi correlati. Ciò elimina anche la maggior parte dei problemi con chiavi univoche perché ogni chiave punta a un elenco. Un singolo oggetto può essere classificato da ciascuna delle parole nel suo nome; questo è estremamente utile se si hanno nomi di prodotti lunghi con più parole. Quando classifichi i tuoi articoli, ogni parola nel nome può essere mappata su una o più chiavi.
Devo anche sottolineare che la costruzione e la classificazione di articoli 10K non dovrebbe richiedere molto tempo se eseguita correttamente (un paio di centinaia di millisecondi è ragionevole). I risultati possono essere memorizzati nella cache fino a quando si desidera utilizzare Application
, Cache
o membri statici.
Per riassumere, la struttura risultante è una Dictionary<string, List<T>>
in cui la stringa è breve (2-6 caratteri funziona bene) ma una chiave univoca. Ogni chiave punta a un List<T>
(o altra raccolta, se si è così inclini) di elementi che corrispondono a quella chiave. Quando viene eseguita una ricerca, si individua la chiave che corrisponde al termine fornito dall'utente. A seconda della lunghezza delle chiavi, è possibile troncare la ricerca dell'utente alla lunghezza massima della chiave. Dopo aver individuato la raccolta figlio corretta, puoi cercare quella raccolta per una corrispondenza completa o parziale utilizzando qualsiasi metodo desideri.
Infine, è possibile creare una struttura leggera per ciascun elemento nell'elenco in modo da poter memorizzare ulteriori informazioni sull'elemento. Ad esempio, potresti creare una piccola classe di prodotti che memorizza il nome, il prezzo, il dipartimento e la popolarità del prodotto. Questo può aiutarti a perfezionare i risultati che mostri all'utente.
Tutto sommato, è possibile eseguire ricerche intelligenti, dettagliate e sfocate in tempo reale.
Le strutture di cui sopra devono fornire una funzionalità all'incirca equivalente a trie.
Si prega di non inserire C# nel titolo. Questo è ciò che i tag sono per. – Amy
Non una raccolta: è possibile utilizzare SQLLite per archiviare i dati e accedervi. –