Come progettare un sito Web con funzionalità di ricerca?

4

Supponiamo di voler creare una pagina Web con alcune funzionalità di ricerca su un database. La ricerca deve essere limitata sia su alcune categorie di dati e testo aperto forniti dagli utenti. I requisiti funzionali e non funzionali pongono questo limite:

  • La ricerca deve essere veloce
  • Il paradigma di rappresentazione dei dati (es. relazionale, relazionale a oggetti, semistrutturato ...) dovrebbe supportare grandi modifiche in ogni fase della vita del software.
  • Il paradigma del database dovrebbe consentire un facile refactoring per il codice client esistente

Tenendo conto di questo

  1. Consiglieresti un database relazionale? Come affronteresti i vincoli in questo scenario?
  2. Consiglieresti un database XML? Come affronteresti i vincoli in questo scenario?
  3. Se pensi che le soluzioni precedenti non siano utili alla luce di questo problema ... quale potrebbe essere un approccio utile?

Fornisci alcune bibliografie (o alcuni siti Web) a supporto delle tue risposte.

grazie!

    
posta JPCF 08.08.2011 - 05:14
fonte

2 risposte

6

Indice Lucene

In generale, alcuni dei grandi siti Web (think server e database cluster) applicazioni che ho scritto, ho utilizzato un indice Lucene / Lucene.NET per creare un indice di ricerca di campi di database appropriati. Il vantaggio principale di questo è la velocità, un indice db in memoria invece di un round trip - > db - > webserver per una ricerca.

Da una prospettiva di sviluppo del codice, lucene è completamente separato dall'implementazione del database e quindi si ha una separazione di preoccupazioni tra il modo in cui si desidera rappresentare i dati e come si indicizzano i dati per una facile ricerca. È possibile utilizzare un db NoSQL, un DB relazionale, ecc. Il motore di ricerca non si preoccuperà di ottenere i risultati dall'indice e solo quando è necessario visualizzare i contenuti effettivi è possibile afferrare il contenuto con un campo indicizzato sul db e hai finito.

Vedi il motore di ricerca su:

Ci sono in realtà 2 indici lucene dietro le quinte, 1 indice che è stato creato appositamente per il testo predittivo (i risultati restituiti sono basati sugli artisti più cercati all'epoca) e l'indice db completo che indicizza gli album, artisti che corrispondono i criteri di ricerca.

Finora le prestazioni dell'Indice Lucene sono esageratamente, ho > 1 milione di voci db indicizzate per artista e album e possono restituire i dati dei risultati N-Gram indietro < 1 ms per l'indice del testo predittivo.

    
risposta data 08.08.2011 - 06:03
fonte
1

L'uso o meno di SQL o Lucene per la ricerca dipende da quanto è sofisticato il bisogno della ricerca.

  • Se non hai bisogno di ricerca basata su parole chiave, segui SQL.
  • Se ti interessa un ordinamento più intelligente dei risultati, usa Lucene.
  • Se hai bisogno di ricerca basata su parole chiave su una grande quantità di dati, usa Lucene.

Se decidi di andare con Lucene, allora Incorporare Lucene nel tuo servizio dà consigli agli sviluppatori su come iniziare . Manterrai comunque i tuoi dati in SQL ma conserverai anche un'altra copia delle parti ricercabili in Lucene. C'è di più qui su SQL vs Lucene. Indica anche come usare Lucene in ambienti multi-thread.

    
risposta data 04.05.2013 - 21:04
fonte

Leggi altre domande sui tag