Algoritmo di ricerca

1

Vorrei creare un sito in cui gli utenti possano pubblicare articoli con le seguenti parti opzionali:

  • Un titolo
  • Contenuti (testo)
  • Categorie
  • Parole chiave

Gli articoli saranno archiviati in mongodb e il sito sarà compilato in node.js. Gli utenti possono cercare nel sito utilizzando una normale casella di testo di ricerca.

Sto pensando di creare le seguenti raccolte:

  • Utenti
  • Articoli
  • Parole chiave

Creerò quindi una voce per ogni parola chiave utilizzata nella raccolta Parole chiave con una matrice contenente tutti gli articoli che la utilizzano. Se un utente effettua una ricerca, la ricerca viene suddivisa in parole chiave e ogni parola chiave viene cercata nella raccolta Parole chiave. Ogni articolo viene quindi recuperato dal db e classificato in base alla pertinenza.

Le mie domande sono:

  1. Sarebbe efficace usare una raccolta di parole chiave come questa, dovrei semplicemente usare la raccolta articoli (usando la ricerca full-text o qualcosa del genere) o dovrei strutturarla in qualche altro modo?
  2. In che modo incorporare la possibilità di cercare il titolo, i contenuti o le categorie per gli articoli anziché solo le parole chiave?
  3. Sarebbe meglio usare qualcosa come Apache Lucene piuttosto che costruire questa funzionalità da solo?
posta neelsg 23.09.2013 - 15:51
fonte

2 risposte

2

Vorrei utilizzare una piattaforma esistente progettata per la ricerca. Hai citato Lucene e ce ne sono altri in giro in base alla lingua che stai utilizzando.

Se si desidera creare un server di ricerca indipendente che sia indipendente dal linguaggio, consultare SOLR. È basato su Lucene, quindi un sacco di supporto.

Personalmente mi piace la Sfinge, ma potrebbe non funzionare nella tua situazione, tutto dipende dalla lingua che stai usando.

    
risposta data 23.09.2013 - 21:34
fonte
1

Non sarebbe una buona idea costruire la ricerca come suggerisci per una serie di motivi diversi.

  1. Stai facendo affidamento sulla creazione di parole chiave utili e accurate e sulla gestione di tali parole chiave. Come vengono create le nuove parole chiave? Chi è responsabile del collegamento delle parole chiave giuste al contenuto?
  2. Non hai un meccanismo chiaro per ordinare i risultati della ricerca. Come decideresti quale degli articoli potrebbe essere il più rilevante? Se viene utilizzata solo una parola chiave, tutti gli articoli avranno lo stesso peso, pertanto è necessario impostarli di default su qualcosa come recency o ordine alfabetico per titolo.
  3. Stai ignorando molte informazioni utili sul contenuto della ricerca. Il titolo e il corpo del documento conterranno alcune informazioni che non sono contenute nelle parole chiave, a meno che qualcuno non spenda molto tempo a gestire le parole chiave.

Le parole chiave possono ancora svolgere un ruolo, ma forse come uno dei molti campi (incluso titolo e contenuto) utilizzati nella ricerca. Potrebbero essere semplicemente gestiti come array nel record principale dell'articolo anziché in una raccolta separata che deve essere gestita e collegata al contenuto.

Dato che ti impegni a utilizzare MongoDB, ti suggerisco di provare la ricerca full text nativa di MongoDB funzionalità come inizio . Prova a indicizzare titolo, contenuto e parole chiave (memorizzato come array con l'articolo). Puoi giocare con i pesi applicati a ciascuna colonna per determinare in che modo influiscono sulla pertinenza.

Come suggerisce @Bill Leeper, i motori di ricerca autonomi potrebbero anche essere un'opzione se trovi che hai bisogno di qualcosa di più sofisticato di quello che è incorporato in MongoDB, o la ricerca relativamente nuova di testo completo di MongoDB non funziona come previsto. SOLR potrebbe essere un buon punto di partenza perché è indipendente dalla lingua e molto ricco.

    
risposta data 24.09.2013 - 02:53
fonte

Leggi altre domande sui tag