2012-05-04 14 views
8

que estoy usando Haystack por la búsqueda y el SearchQuerySet resultante devuelta contiene elementos Ninguno:Haystack queryset contiene elementos Ninguno

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

Correr rebuild_index no ayuda. Si elimino la llamada .models() de la primera línea, el problema desaparece. Podría filtrar los elementos Ninguno de los resultados, pero quería saber si este es el comportamiento previsto.

estoy usando Django 1.4, Whoosh, y pajar 2.0.0-beta

+1

No lo he intentado todavía, pero [este tipo] (https://groups.google.com/forum/?fromgroups#!searchin/django-haystack/none/django-haystack/XSjIr8wx3lA/7f82x2QJ9cUJ) sugiere usando Solr en lugar de Whoosh. – simlmx

+0

Actualización: ahora lo he probado y funciona con Solr. – simlmx

+0

todo el mundo sabe que la búsqueda elástica o solr funciona mejor, pero para sitios pequeños y medianos, Whoosh está muy bien en mi humilde opinión y no hace problemas para instalar/configurar (solo después, jaja). – benzkji

Respuesta

4

tuve este problema cuando el índice pajar tenía registros sin registros correspondientes en la base de datos.

+3

Gracias, este no es el problema. Resulta que los valores 'Ninguno' corresponden a los objetos del Usuario. Aparentemente la función _models_ elimina hits que no son del tipo de modelo correcto pero deja un tipo None en vez de filtrarlos – zimkies

+0

¿No puede decir que este problema es solo para el backend 'whoosh'? ¿Lo soluciona usar el motor Solr? – Daria

+1

¿Entonces no hay solución para Whoosh? – awidgery

1

Tuve el mismo problema al utilizar Whoosh, los elementos instalados Elasticsearch y None desaparecieron.

3

No, definitivamente no es el comportamiento previsto, y como puedo ver, parece estar relacionado con una decisión de diseño en Whoosh. Y, a partir de diciembre de 2015, esto todavía parece ser un problema, como se puede ver here. Además, puedo reproducirlo con mi configuración (django 1.8.5, pajar 2.4.1, Whoosh 2.7.0) - es por eso que vine aquí.

solución rápida y sucia que trabajó para mí: Definir un nuevo campo en el índice (tipo/modelo/tomate), configurarlo el mismo para cada modelo, y el filtro contra ese valor:

.filter(type='my_modelname')

en lugar de

.models(MyModel).

No sé (todavía) cómo se escala, pero parece funcionar bien.

+1

¡Esta solución funciona bastante bien! – mbo

Cuestiones relacionadas