2012-09-04 9 views
6

Io uso pagliaio 1.2.6 con Whoosh 2.4 e Django 1.3. Diciamo che abbiamo il modello sottostante che descrive un post ipotetico.Django Haystack completamento automatico su due (multipli) campi

Post(models.Model): 
    title = models.CharField() 
    body = models.TextField() 

abbiamo costruito il nostro indice di post come questo per il completamento automatico sul campo del corpo:

PostIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    content_auto = indexes.EdgeNgramField(model_attr='body') 

Avendo letto la documentazione pagliaio fondo non riesco a trovare se è possibile avere il completamento automatico su entrambi i campi titolo e il corpo.

Quindi ... è possibile o ...?

risposta

7

Sono riuscito a farlo basato su this. Devi solo fare un EdgeNgramField per ogni campo che si desidera completamento automatico sul nell'indice, quindi applicare il completamento automatico a due diversi set di query di ricerca e concatenare:

sqs = SearchQuerySet().models(Post) 
sqs1 = sqs.filter(title_auto=q) 
sqs2 = sqs.filter(body_auto=q) 

sqs = sqs1 | sqs2 

Se devi fare il filtraggio supplementare, è necessario farlo dopo il completamento automatico (almeno questo era l'unico modo in cui ha funzionato per me).

3

Ecco un modo più semplice, fare la concatenazione nel modello & uso EdgeNgramField (anche se farlo sul corpo di un post è costoso:

#In search_indexes.py 
PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 

#In <app>\template\search\index\<app>\post_text.txt 
{{ object.title }} {{object.body}} 

Poi tutte queste domande sarà completamento automatico sia sul titolo & corpo

sqs = SearchQuerySet().models(Post).autocomplete(text='hello') 

PS Utilizzando Haystack 2.x