2013-01-23 16 views
6

Sto cercando di implementare risultati di rendimento per una ricerca solo una parte di una parola (che si chiama autocomplete in base al Documenti Haystack se non mi sbaglio).Django-haystack: rebuild_index non riesce (haystack.exceptions.SearchFieldError) dopo aver aggiunto la riga `content_auto` necessaria per il completamento automatico

Esempio:

Ricerca "gol"

Risultato "goldfish"

Cosa ho provato?

ho fatto come ha chiesto in step 1 of the docs, ho aggiunto la seguente riga nella mia classe Index:

content_auto = indexes.EdgeNgramField(model_attr='content') 

poi ha fatto python manage.py rebuild_index.

Ricostruire l'indice tuttavia ha prodotto un errorehaystack.exceptions.SearchFieldError: The model '<Person: Reginald>' does not have a model_attr 'content'. Con Reginald essendo la prima voce nella mia tabella indicizzata e Person essere il modello che ho indicizzato.

Ora il mio modello non ha un campo chiamato content ma, come mostrato nei documenti, non dovrebbe essere necessario avere un campo di questo tipo.

Sto usando Whoosh 2.4.1, Django-haystack 1.2.7 e Django 1.4.

+0

So che questa è una vecchia questione, ma avete mai questo numero? –

+0

No. Non ho lavorato a lungo sul problema. – Bentley4

risposta

3

Quindi questo è come sto soluzione di questo momento.

Invece di:

content_auto = indexes.EdgeNgramField(model_attr='content')

Usa:

content_auto = indexes.EdgeNgramField(use_template=True)

Quindi è possibile creare un modello per questi. Ad esempio, ho un catalog app nella mia app catalog, dove voglio cercare name e description. Così, ho fatto un file in templates/search/indexes/catalog/ chiamato item_content_auto.txt, che ha il seguente in esso:

{{ object.name }} 
{{ object.description }} 

Questo sembra funzionare come voglio io. Un po 'più noioso che se 'content' funzionasse, ma dovrebbe essere sufficiente.

0
+0

Sì, ma guarda questo: http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html Dicono che devi solo usare "contenuto", ma questo non funziona. Devono averlo cambiato e non aggiornato i documenti. –

1

Ecco un esempio aggiornato di riferimento (vedi here):

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

    def get_model(self): 
     return Book 

#template 
{{object.name}} 

#query 
SearchQuerySet().autocomplete(text=my_query) 
Problemi correlati