2010-06-30 21 views
6

Ho implementato la ricerca di testo completo utilizzando Sphinx e Thinking Sphinx. Voglio aggiungere la ricerca in base alla colonna. Qualche cosa come :-(prendere un esempio di Stack Overflow)Come implementare la ricerca come Stack Overflow

Si supponga di voler vedere actvities legati a voi, basta digitare:

user:me 

allora sarà restituire un risultato con tutte le domande e le relative risposte ai piemesons.

Se si digita

votes:15 

allora verrà restituito un risultato con tutte le domande taggati con avere più di 15 voti.

E se si digita

user:me votes:15 

allora restituirà tutte le domande e le risposte che appartengono a voi con più di 15 voti.

Come posso implementare questa cosa?

In questo momento i risultati della ricerca sono basati sulla ricerca a testo integrale. Come possono essere inclusi questi tipi di funzionalità?

Eventuali opzioni disponibili in Sfinge o Solr o altri motori di ricerca?

risposta

2

:with opzione in sfinge pensante.

Prima di tutto, è necessario definire tali attributi nella definizione dell'indice (check out attributes section here).

has views_count, :as => :views, :type => :integer 
has user.id, :as => :user, :type => :integer 

Quindi è possibile cercare i messaggi come questo:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id} 

(non sono sicuro se c'è più elegante possibilità di dare intervalli aperti, ma 12..max_int dovrebbe essere sufficiente)

due cose importanti:

  1. se si desidera contare gli oggetti correlati (ad esempio risposte), è necessario utilizzare la cache contatore
  2. se il "utente" è l'associazione polimorfica, vi consiglio "CRC32(CONCAT(user_type, user_id))" invece di user.id
Problemi correlati