2010-10-29 8 views
7

Questa è più una questione di teoria che di pratica. Sto lavorando a un progetto che è un semplice catalogo di link. L'intero modello è simile al catalogo Dmoz o Yahoo, tranne per il fatto che ogni voce ha determinati attributi aggiuntivi.Raccomandazioni sulle tecniche di ricerca

I ho tassonomia gerarchica che funziona su tutte le voci con relazione molti-a-molti, tutte le voci sono ora ordinate in queste categorie e tutto sembra funzionare correttamente. Ora, a che cosa serve un catalogo se non ci sono opzioni di ricerca?

Ecco alcuni dettagli sui miei modelli: ogni voce ha un titolo, una descrizione, un URL e diversi profili social: YouTube, Twitter, Flickr e un paio di altri. Ad ogni voce potrebbe essere associato un logo e un campo nascosto per i tag. Inoltre, il titolo e la descrizione sono memorizzati in tre lingue diverse. Quindi, in pratica mi piacerebbe i risultati di ricerca per essere:

  1. (tra cui quelli tassonomia)
  2. Forse quelli con loghi
  3. Forse quelli con il 100% compilati profili

ho ho provato Sphinx e attualmente sto lavorando con Lucene, ma sembra che in teoria non sto ottenendo la ricerca. Spero che abbia senso che le voci piene siano più alte delle altre, ma non riesco a capire davvero i punteggi. Non vorrei che le voci irrilevanti vengano visualizzate in alto se c'è semplicemente una corrispondenza di parole nell'intera descrizione, poiché i titoli sono più pertinenti.

Quindi la mia domanda è - ci sono libri, tecniche o altri motori di ricerca, anche se (Sfinge e Lucene non sono abbastanza buone) che si raccomandare per questa materia? Non solo mi piacerebbe avere il pieno controllo sui risultati di ricerca e il loro posizionamento, ma anche dare ai miei visitatori informazioni corrette e pertinenti.

Anche i collegamenti a articoli interessanti sono apprezzati!

E No, non sto cercando di ricostruire Google :)

Thanks :)

+1

P.S. Sono disposto a dare una taglia per la migliore risposta. – kovshenin

risposta

4

Sono abbastanza sicuro che Lucene è sufficiente. Abbiamo risolto un compito simile e lo abbiamo fatto bene. Ecco alcuni suggerimenti che posso proporvi ripensando al mio progetto su Lucene.Net.

Tassonomia:

  • Categoria è rappresentato come chiave intera in dB, in modo che ogni documento ha più istanze di campo 'CATEGORIA' di tipo Number. Per esempio documento: [1,2,5,10, 'Ruota'] - significa che la ruota appartiene a ciascuna categoria.
  • campi

non ricercabili (loghi, profilo sociale):

  • Naturalmente è possibile memorizzare i valori non ricercabili in campi non indicizzati di Lucene. Ma abbiamo archiviato tutte le informazioni relative al prodotto in DB per evitare di ricostruire l'indice di Lucene. Quindi Lucene possiede solo per ID del prodotto e valori indicizzati ma memorizzati per i campi chiave.

tre lingue e campi multipli:

  • Noi abbiamo solamente 2 lingue. Quindi i diversi titoli di prodotto possono essere memorizzati nello stesso documento di Lucene e riguardano un singolo ID del prodotto (mentre scrivo prima che ID si riferisca a DB). Ciò consente di cercare prodotti anche se la richiesta dell'utente utilizza un mix di lingue.
  • Ovviamente titolo, tag e descrizione hanno peso diverso per il risultato della ricerca. Lucene lo gestisce assegnando al peso del campo.
5

eccellente libro: Lucene in Action (2nd edition)

Quando abbiamo iniziato con Lucene abbiamo avuto la prima edizione, in realtà vi porterà attraverso tutto il necessario passo per passo. Altamente raccomandato. La 2a edizione è aggiornata per la versione più recente e più grande (3.x.x).

L'algoritmo Tf-Idf funziona molto bene su testi (più grandi), ma se si dispone di una struttura simile a record può ritorcersi contro: i documenti con alcuni termini sono considerati più "pertinenti" rispetto a quelli con molti termini. Con Lucene, lo farai funzionare, ma dovrai sporcarti le mani.

Quello che devi fare in pratica è boost your title field, quindi diventa più rilevante. Puoi anche change the scoring mechanism assegnare punteggi più alti per i documenti che hanno più informazioni.

Buon divertimento. Se non riesci a capirlo, c'è un eccellente supporto su Lucene mailinglist.

1

Lucene o Solr farebbero il lavoro. Solr è costruito sopra Lucene, see here for more info

Vorrei andare con solr. download + configurarlo è facile e veloce. Inizia con il tutorial e il mio link collection. La pertinenza dovrebbe andare bene con solr ed è facilmente regolabile.

Cerca in Dewfy e Matthijs Bierman rispondi per dei buoni punti.

Quindi scegliere il gestore di query dismax e si può preferire documenti con determinate proprietà.

E.g. per la percentuale di un profilo completo si definisce un campo separato 'profile_completness', quindi è possibile aggiungere profile_completeness a bf (boostfunction) del gestore dismax: più completo è il profilo, più i documenti verranno potenziati.

Ho già detto che è possibile sintonizzare facilmente la pertinenza: ad es. puoi impostare bf a sth. del tipo: bf=title^10 tags^5 profile_completeness^1

"Possibilmente quelli con loghi" possono essere risolti tramite query boost: bq=logo:[* TO *]^1. Dove logo:[* TO *] significa "solo documenti che contengono il logo del campo"

Per visualizzare un albero di categorie profondamente nidificati, è necessario creare quell'albero in memoria e inviare il feed con un'importazione speciale. Abbiamo un'app funzionante per questo. Puoi utilizzare our approach

Se hai bisogno di ulteriore assistenza, non esitare a commentare.

2

Proverò ad aggiungere le belle risposte di Matthijs, Dewfy e Karussell. Fondamentalmente, stai cercando di migliorare la pertinenza della ricerca. Ti suggerisco di leggere Grant Ingersoll's Debugging Search Application Relevance Issues e il suo Optimizing Findability in Lucene and Solr, così come il suo Practical Relevance slides.

Per lingue diverse e per sfaccettatura, suggerisco di utilizzare Solr. È un motore di ricerca costruito con Lucene che è facile da usare. Può supportare più lingue utilizzando un diverso Solr Core per ogni lingua.