2008-09-21 16 views
30

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?Creazione di un motore di ricerca Web

Capisco che si tratti di una grande 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 a cui potrei essere interessato.

+0

Dipende dai tuoi linguaggi di programmazione preferiti. Java è fuori discussione. Codice in asp.net, perl, python, php, ...sarebbe importante sapere prima di poter offrire una risposta adeguata :) – Anheledir

+0

hey! dai un'occhiata a [mine] (http://code.google.com/p/goomez/) ... molto semplice cercatore di file basato su [lucene.net] (http://incubator.apache.org/lucene.net/) – sebagomez

+0

Hai provato a nutch.net una porta dal nutch java .... – chugh97

risposta

48

Ci sono molte parti di un motore di ricerca. In linea di massima, in modo irrimediabilmente generale (gente, sentirsi libero di modificarla se si sente di poter aggiungere descrizioni migliori, collegamenti, ecc):

  1. Il crawler. Questa è la parte che attraversa il web, cattura le pagine e memorizza le informazioni su di esse in un archivio dati centrale. Oltre al testo stesso, vorrai cose come il tempo di accesso, ecc. Il crawler deve essere abbastanza intelligente da sapere quanto spesso colpire determinati domini, obbedire alla convenzione robots.txt, ecc.

  2. Il parser. Questo legge i dati recuperati dal crawler, li analizza, salva i metadati di cui ha bisogno, getta via la posta indesiderata e, eventualmente, fornisce suggerimenti al crawler su cosa recuperare la prossima volta.

  3. L'indicizzatore. Legge le cose che il parser ha analizzato e crea indici invertiti nei termini trovati sulle pagine web. Può essere intelligente quanto vuoi: applicare le tecniche di PNL per creare indici di concetti, link incrociati, inserire sinonimi, ecc.

  4. Il motore di classifica. Dato qualche migliaio di URL che corrispondono a "mela", come decidi quale risultato è il migliore? Jut l'indice non ti dà quell'informazione. È necessario analizzare il testo, la struttura di collegamento e qualsiasi altro pezzo che si desidera guardare e creare alcuni punteggi.Questo può essere fatto completamente al volo (che è davvero difficile), o basato su alcune nozioni pre-calcolate di "esperti" (vedi PageRank, ecc.).

  5. Il front-end. Qualcosa deve ricevere query utente, colpire il motore centrale e rispondere; questo qualcosa deve essere intelligente riguardo ai risultati di memorizzazione nella cache, magari mescolando i risultati di altre fonti, ecc. Ha una serie di problemi.

Il mio consiglio - scegliere quali di questi interessi la maggior parte, scaricare Lucene o Xapian o qualsiasi altro progetto open source là fuori, tirare fuori la punta che fa uno dei compiti di cui sopra, e cercare di sostituirlo . Speriamo, con qualcosa di meglio :-).

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

+1

Risposta stupenda. Grazie! – Aseem

+0

Ecco la mia implementazione del motore di classifica (elasticsearch) e il front end (angularjs) https://machinelearningblogs.com/2016/12/12/how-to-build-a-search-engine-part-1/ –

5

Mi sembra che la parte più grande sia l'indicizzazione dei siti. Fare robot per setacciare internet e analizzare i loro contenuti.

Un amico e io stavamo parlando di quanto sia sorprendente Google e altri motori di ricerca. Milioni di risultati in meno di mezzo secondo? Pazzo. Penso che potrebbero avere risultati di ricerca preimpostati per gli elementi comunemente cercati.

modifica: This sito sembra piuttosto interessante.

+0

Esse - hanno pubblicato documenti accademici sui modi migliori per memorizzare i risultati su base regolare. Hai solo messo in cache le risposte più recenti? Esaminate i registri delle query e provate a prevedere cosa è necessario memorizzare nella cache e precompilarlo? Roba affascinante – SquareCog

6

Xapian è un'altra opzione per voi. Ho sentito che scala meglio di alcune implementazioni di Lucene.

4

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

[La mia comprensione è che il progetto di ricerca di Wikia è terminato. Tuttavia penso che farsi coinvolgere con un progetto open-source già esistente è un buon modo per facilitare in un'impresa di queste dimensioni.]

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

0

Ecco un approccio leggermente diverso, se non sei così interessato alla programmazione ma più interessato ai risultati: considera la creazione utilizzando l'API Google Custom Search Engine.

Vantaggi:

  • Google fa tutto il lavoro pesante per voi
  • familiare interfaccia utente e il comportamento per gli utenti
  • può avere qualcosa e funzionante in pochi minuti
  • Un sacco di possibilità di personalizzazione

Svantaggi:

  • Non stai scrivendo codice, quindi non c'è possibilità di apprendimento
  • Tutto ciò che si desidera effettuare la ricerca deve essere pubblico & nell'indice di Google già
  • Il risultato è legato a Google
+0

Non lo chiamerebbe esattamente un'API ... – Sean

+0

Perché no? Non tutte le API sono un insieme di funzioni chiamabili. Puoi ospitare la descrizione XML del tuo motore di ricerca sul tuo sito web e non utilizzi nemmeno l'interfaccia web di Google per questo. –

6

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

1

Se sei interessato a conoscere la teoria che sta dietro il recupero delle informazioni e alcuni dettagli tecnici dietro l'implementazione dei motori di ricerca, posso consigliare il libro Managing Gigabytes di Ian Witten, Alistair Moffat e Tim C. Bell. (Disclosure: Alistair Moffat era il mio supervisore universitario.) Anche se è un po 'datato ora (la prima edizione è uscita nel 1994 e la seconda nel 1999 - cosa c'è di così difficile gestire i gigabyte ora?), La teoria sottostante è ancora valida ed è una grande introduzione sia all'indicizzazione che all'uso della compressione nei sistemi di indicizzazione e recupero.

1

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.

Problemi correlati