Domanda

Sono sempre stato interessato allo sviluppo di un motore di ricerca web. Qual è un buon punto di partenza? Ho sentito parlare di Lucene, ma non sono un grande ragazzo di Java. Altre buone risorse o progetti open source?

Capisco che sia un'enorme impresa, ma fa parte dell'appello. Non sto cercando di creare il prossimo Google, solo qualcosa che posso usare per cercare un sottoinsieme di siti che potrebbero interessarmi.

È stato utile?

Soluzione

Esistono diverse parti di un motore di ricerca. In generale, in un modo irrimediabilmente generale (gente, sentiti libero di modificare se ritieni di poter aggiungere descrizioni, collegamenti, ecc. Migliori:

  1. Il crawler . Questa è la parte che passa attraverso il web, prende le pagine e memorizza le informazioni su di esse in un archivio dati centrale. Oltre al testo stesso, ti occorreranno cose come il tempo in cui hai avuto accesso, ecc. Il crawler deve essere abbastanza intelligente da sapere con quale frequenza colpire determinati domini, obbedire alla convenzione robots.txt, ecc.

  2. Il parser . Questo legge i dati recuperati dal crawler, li analizza, salva tutti i metadati di cui ha bisogno, butta via la spazzatura e forse fornisce suggerimenti al crawler su cosa recuperare la prossima volta.

  3. L'indicizzatore . Legge il materiale analizzato dal parser e crea indici invertiti nei termini presenti nelle pagine Web. Può essere intelligente come vuoi che sia: applica le tecniche NLP per creare indici di concetti, collegamenti incrociati, aggiungere sinonimi, ecc.

  4. Il motore di classificazione . Date alcune migliaia di URL corrispondenti a "apple", come decidi quale risultato è il migliore? L'indice non ti fornisce queste informazioni. È necessario analizzare il testo, la struttura di collegamento e qualsiasi altra parte che si desidera guardare e creare alcuni spartiti. Questo può essere fatto completamente al volo (è davvero difficile) o basato su alcune nozioni pre-calcolate di "esperti". (vedi PageRank, ecc.)

  5. Il front-end . Qualcosa deve ricevere richieste degli utenti, colpire il motore centrale e rispondere; questo qualcosa deve essere intelligente riguardo alla memorizzazione nella cache dei risultati, possibilmente mescolando i risultati da altre fonti, ecc. Ha una propria serie di problemi.

Il mio consiglio: scegli quale di questi interessi ti interessa di più, scarica Lucene o Xapian o qualsiasi altro progetto open source là fuori, estrai il bit che fa una delle attività sopra e prova a sostituirlo. Speriamo che con qualcosa di meglio :-).

Alcuni link che potrebbero rivelarsi utili: " Agile web crawler " , un documento di Estonia (in inglese) Sphinx Search engine , un indice di indicizzazione e ricerca API. Progettato per DB di grandi dimensioni, ma modulare e aperto. " Information Retrieval , un libro di testo sull'IR da Manning et al. Buona panoramica di come vengono costruiti gli indici, vari problemi che emergono, nonché alcune discussioni sulla scansione, ecc. Versione online gratuita (per ora)!

Altri suggerimenti

Xapian è un'altra opzione per te. Ho sentito che si ridimensiona meglio di alcune implementazioni di Lucene.

Guarda nutch , è scritto dallo stesso ragazzo che ha creato Lucene ( Doug Cutting ).

Mi sembra che la maggior parte sia l'indicizzazione dei siti. Fare robot per setacciare Internet e analizzarne i contenuti.

Un amico e io stavamo parlando di come Google e gli altri motori di ricerca debbano essere nascosti. Milioni di risultati in meno di mezzo secondo? Pazzo. Penso che potrebbero avere risultati di ricerca preimpostati per gli articoli cercati comunemente.

modifica: Questo sito sembra piuttosto interessante.

Vorrei iniziare con un progetto esistente, come il motore di ricerca open source di Wikia.

[La mia comprensione è che il progetto Wikia Search è terminato. Tuttavia, penso che essere coinvolti in un progetto open source esistente sia un buon modo per facilitare un'impresa di queste dimensioni.]

http://re.search.wikia.com/about/get_involved.html

Se sei interessato a conoscere la teoria alla base del recupero delle informazioni e alcuni dettagli tecnici alla base dell'implementazione dei motori di ricerca, posso consigliare il libro Managing Gigabytes di Ian Witten, Alistair Moffat e Tim C. Bell. (Divulgazione: Alistair Moffat era il mio supervisore universitario.) Sebbene sia un po 'datato ora (la prima edizione è stata pubblicata nel 1994 e la seconda nel 1999 - cosa c'è di così difficile nella gestione dei gigabyte ora?), La teoria di base è ancora valida ed è un'ottima introduzione sia all'indicizzazione che all'uso della compressione nei sistemi di indicizzazione e recupero.

Sono interessato anche al motore di ricerca. Ho raccomandato sia Apache Hadoop MapReduce che Apache Lucene. Ottenere più velocemente da Hadoop Cluster è il modo migliore.

Ci sono porte di Lucene. Zend ne ha uno disponibile gratuitamente. Dai un'occhiata a questo breve tutorial: http://devzone.zend.com/node/ view / id / 91

Ecco un approccio leggermente diverso, se non sei così interessato alla sua programmazione ma più interessato ai risultati: considera di costruirlo usando Motore di ricerca personalizzato di Google API.

I vantaggi:

  • Google fa tutto il lavoro pesante per te
  • Interfaccia utente e comportamento familiari per i tuoi utenti
  • Può avere qualcosa attivo e funzionante in pochi minuti
  • Molte funzionalità di personalizzazione

Svantaggi:

  • Non stai scrivendo codice, quindi nessuna opportunità di apprendimento lì
  • Tutto quello che vuoi cercare deve essere pubblico & amp; nell'indice di Google già
  • Il tuo risultato è legato a Google
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top