Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haystack queryset contains None elements

I'm using Haystack for search, and the resulting SearchQuerySet returned contains None elements:

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

Running rebuild_index doesn't help. If I remove the .models() call from the first line, the problem goes away. I could just filter out None elements from the results, but I wanted to know if this is intended behaviour?

I am using Django 1.4, Whoosh, and Haystack 2.0.0-beta

like image 530
zimkies Avatar asked May 04 '12 18:05

zimkies


3 Answers

I had this problem when haystack index had records without corresponding records in DB.

like image 153
Sergey Fedoseev Avatar answered Nov 15 '22 08:11

Sergey Fedoseev


No, it is definitly not the intended behaviour, and as I can see, seems to be related to a design decision in Whoosh. And, as of December 2015, this still seems to be an issue, as can be seen here. Also, I can reproduce it with my setup (django 1.8.5, haystack 2.4.1, Whoosh 2.7.0) - that's why I came here.

Quick and dirty solution that worked for me: Define a new field on your index (type/model/tomato), set it the same for each model, and filter against that value:

.filter(type='my_modelname')

instead of

.models(MyModel).

I don't know (yet) how this scales, but seems to work ok.

like image 43
benzkji Avatar answered Nov 15 '22 07:11

benzkji


Had the same problem using Whoosh, installed Elasticsearch and the None elements went away.

like image 1
gitaarik Avatar answered Nov 15 '22 09:11

gitaarik