2010-01-28 17 views
5

ich einen Heuhaufen suchen haben, die die folgenden Suchindex hat:Django Haystack genaue Filterung

 
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) 

Wenn ich will alle Programme herausfiltern suchen, die NICHT ‚Gesundheit‘ sind, habe ich die folgende Abfrage ausführen:

 
from haystack.query import SearchQuerySet 

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

Leider werden damit auch Objekte aus dem Programm 'Health \ Other' und 'Health \ Cardiovascular' erzeugt. Wie verhindere ich, dass die Suche diese anderen Programme erlaubt?

Ich benutze Ubuntu 9.10 mit Xapian als meine Suche Back-End.

Antwort

1

können Sie Feldsuchen wie beschrieben verwenden here.

+3

Filter (Programm = "Health") und Filter (program__exact = "Health") sind die gleichen nach der Dokumentation und in der Praxis. – blackrobot

3

Sie haben das Problem wahrscheinlich bereits gelöst, aber ich stolperte gerade über das gleiche Problem mit dem Whoosh Backend. Vielleicht verhalten sich die Xapian und Whoosh Backends gleich? Scheint, dass Whoosh alle CharFields standardmäßig stempelt und in ihnen mit einer contains-Abfrage sucht. Der Wechsel zu einem benutzerdefinierten Backend, ohne Stemming in CharFields aktiviert zu haben, hat dieses Problem für mich behoben.

Hoffentlich wird dies jemand anderen in die richtige Richtung schieben.

0

Verwendung „prepare_data“ für Programmfeld und werde Gesundheit \ blabla Dinge loswerden

0

Für solr Backend muss ich _exact (nur eine unterstrichenen statt zwei) verwenden.

0

Haftungsausschluss: Ich bin der Maintainer von Xapian-Haystack.

Ich glaube, das passiert, weil Xapian-Haystack einen Begriff Generator verwendet, der Sonderzeichen wie / entkam. In Ihrem Fall wurde "Health\Other" als "health" und "other" indexiert. Dies wurde kürzlich in der Hauptniederlassung von Xapian-Haystack behoben, siehe z.B. here.

Verwandte Themen