Se avessi voluto costruire un motore di ricerca, come avrei iniziato? [chiuso]


9

Qualcuno può indicarmi la giusta direzione? Non ho davvero esperienza nella scrittura di codice ma sono uno studente veloce. Non sto cercando di dire che sarà facile ma spero che qualcuno mi possa aiutare ...


6
Se non hai alcuna esperienza nella scrittura di codice, che ne dici di imparare come programmare prima? Costruire un motore di ricerca è un po 'eccessivo per qualcuno che non conosce la programmazione.
Terence Ponce,

3
Come dice Terence, non è qualcosa per i nuovi programmatori. Qualsiasi motore di ricerca che va bene tende a essere un lavoro abbastanza complicato, c'è una ragione per cui Google è così massiccio, fanno un compito molto difficile abbastanza bene. Anche i programmatori esperti tendono a preferire l'uso di qualcosa di pre-costruito. Se dai un'idea di ciò che desideri, forse possiamo indicarti la giusta direzione.
Orbling

2
Inizia con un progetto più piccolo. La costruzione di un motore di ricerca comporta un'enorme quantità di codice. E come raccogli tutti i dati per il tuo motore di ricerca? Avrai bisogno di molto più codice e di un'infrastruttura enorme. Davvero, ti preghiamo di iniziare su progetti più piccoli e di lavorare o sarai solo frustrato.
James,

1
Questo libro mi ha aiutato a capire cosa sono i motori di ricerca e come sono costruiti: nlp.stanford.edu/IR-book
devnull

Risposte:


16

Ho scritto questo per un blog che avevo di solito quando ... non è più sul web quindi ... eccolo! :

Come scrivere un motore di ricerca

Darren Rowse su probolgger.net sta organizzando un progetto di scrittura di gruppo su qualsiasi cosa "How to". Questo è uno dei pochi blog che leggo regolarmente, quindi immagino perché non scrivere qualcosa che valga la pena leggere per un cambiamento, piuttosto il mio rant violento standard in cui finirò per minacciare di pugnalare alla gola Hugo Chaves.

Ho deciso di scrivere "Come scrivere un motore di ricerca". Ho scelto questo argomento per due motivi:

  1. Non ci sono molte buone informazioni su questo sul web.
  2. Attualmente sto scrivendo uno per uno dei miei clienti.

Il mio cliente è un rivenditore online di dimensioni significative, quindi non cerco su tutto il Web solo il loro sito, più specificamente solo i prodotti in vendita sul loro sito. Tuttavia le stesse tecniche possono essere utilizzate per scrivere più complesse utilizzate per la ricerca in Internet. So che questo non è un blog tecnico, quindi non approfondirò troppo i dettagli tecnici, né discuterò dei requisiti hardware / di potenza di elaborazione o della scansione del Web.

Sto usando una tecnica abbastanza semplice, ho table (tblKeywords) con tre campi:

  1. Itemid (Se stai effettuando una ricerca sul web questo sarebbe URL)
  2. KeyWord (parola chiave indicizzata)
  3. Peso (questo è un valore numerico compreso tra 1 e 100, maggiore è questo numero, maggiore è il peso (significativo) della parola chiave) * PK = ItemID + KeyWord

La prima cosa che faccio è raccogliere singole parole da qualsiasi luogo rilevante. Per il mio cliente tirerò a parole la tabella dei prodotti. In particolare dai campi Itemid, ItemName, ItemShortDescription, ItemLongDescription, Manufacturer, ManufacturerSKU, Category1, Category2, Category3 ect. Se si stanno indicizzando pagine Web, è possibile estrarre i dati dal testo della pagina, dal titolo della pagina, dall'URL o dai collegamenti su altre pagine che rimandano alla pagina indicizzata.

Il valore di ponderazione è determinato dalla provenienza della parola chiave. Ad esempio, nel mio caso lo SKU della produzione dell'articolo avrebbe un peso di 100, mentre una parola dal nome dell'articolo può avere un peso di 25. Una parola dalla descrizione ItemLong può avere un peso di 5. Se stai indicizzando le pagine web le parole dal titolo della pagina può avere un peso di 75 mentre una parola in grassetto dal testo della pagina può avere un peso di 10. Se una parola viene ripetuta in più di una volta o \ e in più di un punto, si sommerebbe il peso per ogni volta capita. Ad esempio, se la parola "Shirt" viene da due punti per ItemId = 12345, ItemName (peso di 25) e appare due volte in ItemLongDescription (Peso di 5 x2 = 10) la parola "shirt" avrebbe un peso totale di 35 per ItemId = 12345.

Se qualcuno fa una ricerca di "camicia rosa" cerco nella mia tabella tutte le occorrenze delle parole "rosa" o "camicia" e totale i pesi. Mostrando gli articoli con il peso totale più alto in cima.

SQL:

Select Itemid, sum(weight) as totWeight from tblKeywords
group by itemId having keyword in ('pink','shirt')

Quindi eccolo qui, un motore di ricerca di base (e veloce). Ovviamente c'è ancora molto da fare, come eliminare la punteggiatura, il codice HTML e parole chiave senza valore come "e", "se", "o". Questo non riguarda la ricerca di frasi chiave, ma puoi usare un sistema simile per le frasi se riesci a capire dove iniziano e finiscono.


grazie bella risposta. cosa suggeriresti anche per raggruppare i prodotti. voglio dire che hai circa 1 milione di pagine di prodotti sottoposti a scansione da diversi siti Web. vuoi raggruppare gli stessi prodotti su diversi siti Web: programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@Monster - Che ne pensi della combinazione Produttore \ SKU dell'articolo?
Morons,

È inoltre possibile acquistare (affittare) questi dati da aziende come Etilize
Morons,

puoi spiegarlo un po 'di più perché non l'ho capito. Grazie.
MonsterMMORPG l'

3
Una risposta pratica "ok". Tuttavia, questo ignora l'intero campo di studio noto anche come "Information Retrieval". In termini di "Puntare nella giusta direzione" IR sarebbe stato meglio nella mia mente.
Darknight,


3

I motori di ricerca sono basati su crawler web , dovrai capire come costruire uno di questi succhiatori prima di poter sviluppare un sito Web per visualizzare i suoi risultati (avrai bisogno di un database veloce ed efficiente per andare con esso).


3
Un motore di ricerca può consumare l'output di un web crawler, ma altrimenti hanno ben poco a che fare l'uno con l'altro. Inoltre, è improbabile che un database veloce ed efficiente della varietà SQL sia di grande aiuto in questa impresa. I motori di ricerca sono generalmente realizzati utilizzando schemi di indicizzazione di file invertiti, che non si adattano affatto allo stampo SQL.
Marcelo Cantos,

@Marcelo Cantos: l'indicizzazione dei file invertiti sembra complicata: -0 - Grazie per l'aiuto nel chiarire la mia risposta!
Palbakulich,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.