2012-05-04 20 views
8

che sto usando Haystack per la ricerca, e la conseguente SearchQuerySet restituita contiene Nessuno elementi:Haystack set di query contiene Nessuno Elementi

>> SearchQuerySet().models(Question, Document, Idea) 
>> [<SearchResult: idea.idea (pk=3875)>, None, None, None] 

esecuzione rebuild_index non aiuta. Se rimuovo la chiamata .models() dalla prima riga, il problema scompare. Potevo semplicemente escludere Nessuno degli elementi dai risultati, ma volevo sapere se si tratta di un comportamento previsto?

Sto usando Django 1.4, Fruscio, e Haystack 2.0.0-beta

+1

Non l'ho ancora provato, ma [questo ragazzo] (https://groups.google.com/forum/?fromgroups#!searchin/django-haystack/none/django-haystack/XSjIr8wx3lA/7f82x2QJ9cUJ) suggerisce usando Solr invece di Whoosh. Aggiornamento – simlmx

+0

: ora l'ho provato e funziona con Solr. – simlmx

+0

tutti sanno che la ricerca elastica o il solr funzionano e funzionano meglio, ma per i siti di piccole e medie dimensioni, Whoosh è molto adatto a IMHO e non crea problemi nell'installazione/configurazione (solo in seguito, haha). – benzkji

risposta

4

ho avuto questo problema quando l'indice aveva pagliaio record senza record corrispondenti nel DB.

+3

Grazie, questo non è il problema però. Risulta che i valori "Nessuno" corrispondono agli oggetti Utente. Apparentemente la funzione _models_ rimuove gli hit che non sono del tipo giusto ma lascia un tipo None invece di filtrarli fuori – zimkies

+0

Non puoi dire, questo problema è solo per il backend 'whoosh'? L'uso del motore Solr lo risolve? – Daria

+1

Quindi non c'è una soluzione per Whoosh allora? – awidgery

1

Avendo lo stesso problema con Whoosh, Elasticsearch installato e gli elementi None sono andati via.

3

No, non è sicuramente il comportamento previsto e, come posso vedere, sembra essere correlato a una decisione di progettazione in Whoosh. E, a partire da dicembre 2015, questo sembra ancora essere un problema, come si può vedere here. Inoltre, posso riprodurlo con il mio setup (django 1.8.5, haystack 2.4.1, Whoosh 2.7.0) - ecco perché sono venuto qui.

Soluzione rapida e sporca che ha funzionato per me: Definire un nuovo campo sul vostro indice (modello/pomodoro/tipo), impostare lo stesso per ogni modello, e il filtro contro tale valore:

.filter(type='my_modelname')

anziché

.models(MyModel).

Non so (ancora) come questa scala, ma sembra funzionare bene.

+1

Questa soluzione funziona abbastanza bene! – mbo

Problemi correlati