Come posso modellare concettualmente una ricerca di craigslist?

0

Sto cercando di capire come funziona qualcosa di simile, ma sono inesperto e sto cercando di capire come funzionerebbe il processo.

Supponiamo che tu abbia dieci categorie, mille codici postali e diecimila elementi elencati in ogni categoria, ognuno dei quali ha una descrizione.

Quando un utente esegue una ricerca (ad es. "guitar hero xbox" nella categoria "videogiochi" all'interno di "50 miglia", cosa succede dopo?

Il database confronterebbe prima i codici postali, per trovare tutto nel range, quindi fare un SELECT items WHERE category="video games" and zipcode=A OR B OR C OR D , quindi eseguire una sorta di ricerca sulla descrizione di ciascun elenco nel set di risultati?

Come funzionerebbe?

Non cerco risposte esatte su CL, sto cercando un'idea generale di come funzioni ovunque / ovunque.

    
posta temporary_user_name 20.08.2013 - 00:03
fonte

2 risposte

3

Non mi preoccuperei troppo di come Craigslist (o qualsiasi sito di grandi dimensioni) lo fa, perché i loro pazzi requisiti di rendimento dettano strongmente decisioni architettoniche.

Risolvere questo in un modo semplice comporterebbe una query come questa:

# pseudo query
SELECT fields
  FROM ads
 WHERE ad.title MATCHES "search keywords"
   AND ad.location IS IN PROXIMITY to "search location"

Ora, sia la ricerca per parole chiave che la ricerca per distanza possono essere compiti complessi in se stessi. In genere, il filtraggio per distanza può essere eseguito molto più rapidamente rispetto al filtraggio in base alle parole, quindi è meglio toglierlo per primo.

Questo può essere fatto con una matematica relativamente facile se si dispone di coordinate della posizione di ricerca, nonché per ogni voce nel database. Implementeresti qualcosa del genere: link . Ci sono anche opzioni geospaziali più appropriate se puoi accedervi.

Il filtraggio per parola chiave di solito inizia con qualcosa di banale come: WHERE title LIKE '%search%' OR body LIKE '%search' , ma è follemente lento e non ha la capacità di ordinare per rilevanza.

Successivamente, si passa a una sorta di ricerca a tutto campo - con MySQL, MyISAM fornisce il metodo MATCH x AGAINST y, che ti dà anche rilevanza.

Oltre a questo, le persone di solito si spostano su una sorta di programma di ricerca dedicato. Sphinx, Lucene ed Elastic Search vengono in mente.

Guardando indietro a Craigslist, in realtà usano Sphinx Search e hanno una infrastruttura complessa probabilmente non ti sarà molto d'aiuto. L'ultima volta che ho controllato, sono il più grande utente di Sphinx, quindi i loro risultati sono abbastanza accademici per altri utenti di grandi dimensioni.

    
risposta data 20.08.2013 - 00:49
fonte
0

Molti prodotti di ricerca performante (sia proprietari che di altro tipo) utilizzano come base Lucene . Altre scelte popolari per "Big Data" includono varie forme di NoSQL . Un altro approccio (anche se questo tende ad essere un po 'più lento) è ricerca full-text in un normale database SQL.

Ecco come alcune ricerche simili al lavoro di ricerca di craigslist - anche se non ho idea di cosa usi Craigslist per alimentare la sua ricerca.

    
risposta data 20.08.2013 - 21:59
fonte

Leggi altre domande sui tag