Miglior algoritmo / pratica quando si crea un meccanismo di ricerca per il proprio database? [chiuso]

7

Ho progettato un database in cui è molto importante fornire agli utenti un buon meccanismo di ricerca. Quindi mi chiedevo quali sono alcune delle migliori pratiche per utilizzare le parole chiave per cercare su più tabelle di database e restituire i record pertinenti?

Altre cose di cui sono curioso:

  • La posizione degli utenti, se forniscono un indirizzo
  • La velocità dell'algoritmo

Informazioni aggiuntive: Sto usando C # e LINQ-To-SQL.

    
posta Alex Hope O'Connor 19.07.2011 - 12:47
fonte

4 risposte

10

Ci sono fondamentalmente tre opzioni (oltre all'utilizzo di istruzioni "LIKE" ingenue):

  • Ricerca di testo completo, se il database lo consente
  • Sfinge, Lucene e opzioni simili
  • Ricerca personalizzata e API di Google / Yahoo / Bing, se applicabile

La mia preferenza va alla ricerca full-text (è abbastanza buona e altamente configurabile in Postgres). Molti sviluppatori preferiscono la Sfinge o Lucene - Non ho mai trovato la necessità di usare entrambi, ma guarda questo post per un secondo parere.

Per l'ubicazione dell'utente, una sorta di infrastruttura GIS (ad esempio PostGIS in Postgres) è utile se si pianifica di estrarre informazioni pertinenti in modo tempestivo (ad esempio, raccogliere statistiche sugli utenti in una determinata area / area). Non conosco abbastanza bene Sphinx e Lucene per sapere cosa gli ultimi due hanno da offrire su questo fronte.

    
risposta data 19.07.2011 - 13:10
fonte
2

Dipende dalla situazione e da cosa stai cercando di cercare. Ricordo che abbiamo implementato una soluzione di ricerca per un cliente creando una vista del database che concatenava diversi campi da diverse tabelle in un unico campo e abbiamo eseguito la ricerca su quella vista.

    
risposta data 19.07.2011 - 14:54
fonte
1

Mentre tutto quanto sopra è importante, la cosa più importante in relazione al fornire un buon meccanismo di ricerca / esperienza è la performance del database (e forse del gui).

In termini di prestazioni del database è necessario assicurarsi che le colonne di ricerca siano indicizzate correttamente, che le statistiche siano aggiornate, che SQL stia utilizzando i piani di query correnti e che il database abbia memoria sufficiente e una CPU decente.

In termini di presentazione dei risultati di ricerca è necessario assicurarsi che i risultati vengano visualizzati in modo tempestivo. Nessun punto in cui il database restituisce risultati in < 1 secondo, ma la GUI impiega 2 minuti per visualizzarli. È necessario assicurarsi che il codice del display sia ottimizzato e che possa supportare il paging.

    
risposta data 19.07.2011 - 17:32
fonte
0

Per ottenere una ricerca migliore, è possibile implementare le seguenti soluzioni:

  • Crea l'indicizzazione corretta della colonna in base alla ricerca condizioni. Inoltre, tieni presente che il numero di indici deve essere ottimale, altrimenti saggio sovraccaricherà il database.
  • Definisci le chiavi primarie per la colonna nella tabella.
  • Se la ricerca è troppo frequente, prova a definire l'opzione di ricerca testo completo al momento della creazione del database.
risposta data 06.11.2013 - 13:35
fonte

Leggi altre domande sui tag