2010-01-28 10 views
5

Tengo una búsqueda pajar que tiene la siguiente SearchIndex:Django Haystack exacta filtrado

 
class GrantIndex(indexes.SearchIndex): 
    """ 
    This provides the search index for the Grant application. 
    """ 
    text = indexes.CharField(document=True, use_template=True) 
    year = indexes.IntegerField(model_attr='year__year') 
    date = indexes.DateField(model_attr='date') 
    program = indexes.CharField(model_attr='program__area') 
    grantee = indexes.CharField(model_attr='grantee') 
    amount = indexes.IntegerField(model_attr='amount') 
site.register(Grant, GrantIndex) 

si quiero buscar la filtración de todos los programas que no son 'Salud', corro la siguiente consulta:

 
from haystack.query import SearchQuerySet 

sqs = SearchQuerySet() 
sqs = sqs.filter(program='Health') 

Desafortunadamente, esto también produce objetos del programa 'Health \ Other' y 'Health \ Cardiovascular'. ¿Cómo impido que la búsqueda permita que entren esos otros programas?

Ejecuto Ubuntu 9.10 con Xapian como mi buscador de back-end.

Respuesta

1

puede usar búsquedas de campo como se describe here.

sqs = sqs.filter(program__exact='Health') 
+3

filtro (programa = "Salud") y filtro (program__exact = "Salud") son los mismos de acuerdo con la documentación y en la práctica. – blackrobot

3

Probablemente haya resuelto el problema, pero me tropecé con el mismo problema con el backend de Whoosh. Tal vez los backends Xapian y Whoosh se comporten de la misma manera? Parece que Whoosh está derivando todos los CharFields por defecto, y buscando dentro de ellos con algún tipo de consulta de contenido. El cambio a un back-end personalizado, sin derivación habilitada en CharFields, solucionó este problema para mí.

Esperemos que esto empuje a alguien más en la dirección correcta.

0

uso "prepare_data" para el campo del programa y deshacerse de cosas blabla salud \

0

Para backend Solr que necesitan utilizar _exact (sólo un subrayado en lugar de dos).

0

Descargo de responsabilidad: Soy el mantenedor de Xapian-Haystack.

Creo que esto sucede porque Xapian-Haystack estaba usando un generador de términos que escapaba caracteres especiales como /.

Por lo tanto, en su caso, "Health\Other" estaba siendo indexado como "health" y "other". Esto fue arreglado recientemente en la rama principal de Xapian-Haystack, ver p. here.

Cuestiones relacionadas