Domanda

Sto costruendo un piccolo motore di ricerca web per la ricerca di circa 1 milione di pagine web e io voglio sapere che cosa è il modo migliore per costruire l'indice invertito? utilizzando i DBMS o cosa ...? da molti punti di vista diversi, come i costi di archiviazione, le prestazioni, la velocità di indicizzazione e ricerca? e io non voglio usare qualsiasi progetto open source per che voglio fare il mio uno!

È stato utile?

Soluzione

Forse si potrebbe desiderare di approfondire il motivo per cui non si desidera utilizzare gli strumenti di F / OSS come Lucene o Sfinge.

Altri suggerimenti

La maggior parte degli attuali gestori di database closed-source hanno una sorta di capacità di indicizzazione full-text. Data la sua popolarità, vi assicuriamo che hanno la maggior parte anche i filtri pre-scritto per HTML così alla ricerca di qualcosa di simile a <p> non darà 1000 risultati per ogni pagina web.

Se si vuole fare il lavoro tutto da soli, filtrando il codice HTML è probabilmente la parte più difficile singola. Da lì, un indice invertito prende un sacco di elaborazione del testo, e produce un grande risultato, ma è fondamentalmente abbastanza semplice - basta eseguire la scansione attraverso tutti i documenti, e costruire una lista di parole e le loro posizioni (di solito dopo il filtraggio estremamente comune parole come "a", "an", "e", ecc, che non sarà termini di ricerca significativi) poi messi quelli tutti insieme in un unico grande indice.

Data la dimensione dell'indice completo, è spesso utile per aggiungere un secondo indice di livello che è abbastanza piccola che si può essere sicuro che si adatta facilmente in memoria reale (ad esempio limitare a poche centinaia di voci o giù di lì). Davvero un piccolo (ma un po 'inefficace) versione va solo dalle prime lettere delle parole, così le parole "A" partono da 0, "B" a 12345, "C" a 34567, e così via. Che non è molto efficace anche se - si ottiene molto di più parole che iniziano con "A" che con "X", per esempio. E 'più efficace per costruire l'indice, e poi scegliere un paio di parole centinaio (o quant'altro) che sono distribuiti uniformemente durante tutto l'indice. Quindi utilizzare che, come l'indice di primo livello. In teoria, si potrebbe ottenere molto più elaborate, come ad esempio qualcosa come un albero B +, ma che di solito è eccessivo - di un milione di documenti, è probabile che ci si ritroverà con meno di centomila parole che vengono usate spesso sufficiente fare molta differenza per la dimensione dell'indice. Anche a questo, un bel po 'di voci saranno cose come errori di battitura, non parole vere ...

Credo che questo libro ha la risposta se ancora alla ricerca di esso.

http://nlp.stanford.edu/IR-book/ informazioni-recupero-book.html

Si consiglia di iniziare con Hadoop. Si distribuirà il vostro edificio indice in modo efficace nel corso del cluster. È possibile utilizzare qualsiasi linguaggio per esso. Java e Python sono raccomandati. Utilizzando Hadoop / MapReduce, si può facilmente indicizzare le pagine web. Ma dovranno essere memorizzate nella cache / memorizzati su un disco e si richiederebbe un parser / tokenizzatore per estrarre il testo prima. Ci sono alcuni parser liberamente disponibili sulla rete. Si può partire da qui se vuoi farlo manualmente. Una volta che avete un indice, quindi la conservazione è un altro compito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top