2010-01-28 13 views
5

मैं भूसे के ढेर खोज जो निम्नलिखित SearchIndex है है:Django Haystack सटीक छानने

:

 
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) 

अगर मैं मैं निम्नलिखित क्वेरी चलाने किसी भी प्रोग्राम है कि 'स्वास्थ्य' नहीं हैं को छान खोज करना चाहते हैं,

 
from haystack.query import SearchQuerySet 

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

दुर्भाग्यवश, यह कार्यक्रम 'स्वास्थ्य \ अन्य' और 'स्वास्थ्य \ कार्डियोवैस्कुलर' से वस्तुओं का भी उत्पादन करता है। मैं उन अन्य कार्यक्रमों को अनुमति देने से खोज को कैसे रोकूं?

मैं उबंटू 9 .10 को एक्सपियन के साथ अपनी खोज बैक-एंड के रूप में चलाता हूं।

उत्तर

1

आप here वर्णित फ़ील्ड लुकअप का उपयोग कर सकते हैं।

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

फ़िल्टर (प्रोग्राम = "स्वास्थ्य") और फ़िल्टर (program__exact = "स्वास्थ्य") दस्तावेज़ीकरण और अभ्यास में समान हैं। – blackrobot

3

आपने संभावित रूप से समस्या को हल कर लिया है, लेकिन मैं हुओश बैकएंड के साथ एक ही समस्या पर ठोकर खाई। शायद एक्सपियन और हुओश बैकएंड्स वही व्यवहार करते हैं? लगता है कि हूश डिफ़ॉल्ट रूप से सभी चारफ़िल्ड्स को स्टेमिंग कर रहा है, और इन्हें किसी प्रकार की क्वेरी-क्वेरी के साथ खोज रहा है। चारफिल्ड्स पर सक्षम किए बिना कस्टम बैकएंड पर स्विचिंग, मेरे लिए यह समस्या तय की गई।

उम्मीद है कि यह किसी और को सही दिशा में धक्का देगा।

0

कार्यक्रम क्षेत्र के लिए उपयोग "prepare_data" और स्वास्थ्य \ blabla बातें

0

Solr बैकएंड के लिए से छुटकारा पाने के मैं _exact (सिर्फ एक दो के बजाय रेखांकन) का उपयोग करने की जरूरत है।

0

अस्वीकरण: मैं एक्सपियन-हेस्टैक का रखरखाव कर रहा हूं।

मेरा मानना ​​है कि ऐसा इसलिए होता है क्योंकि एक्सपियन-हेस्टैक शब्द जनरेटर का उपयोग कर रहा था जो / जैसे विशेष पात्रों से बच रहा था।

तो, आपके मामले में, "Health\Other" को "health" और "other" के रूप में अनुक्रमित किया जा रहा था। यह हाल ही में ज़ापियन-हेस्टैक की मास्टर शाखा में तय किया गया था, उदाहरण के लिए देखें here