2013-10-23 7 views
6

का उपयोग करके एजग्रामफिल्फ़ के साथ स्वत: पूर्ण काम नहीं करता है मुझे मॉडल फ़ील्ड में सबस्ट्रिंग मानों को खोजने की आवश्यकता है। मेरे पास एक इंडेक्स और एक SearchQuerySet है।हैजस्टैक और इंजन एलैस्टिकसेर्च (डीजेगो)

यह लोचदार खोज कॉन्फ़िगरेशन है।

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 
     'URL': 'http://127.0.0.1:9200/', 
     'INDEX_NAME': 'haystack', 
    }, 

} 

मेरा सूचकांक।

class ElementIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    #model fields 
    title_element = indexes.EdgeNgramField(model_attr='title') 
    clean_content = indexes.EdgeNgramField(model_attr='clean_content') 
    def get_model(self): 
     return Element 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return Element.objects.filter(updatetime__lte=datetime.datetime.now()) 

मेरी कस्टम खोज।

SearchQuerySet().filter(title_element=clean_value) 

मेरी डेटाबेस में मैं एक मूल्य "HolaMundoTest" है, और अगर मैं 'होला' या 'HolaM' के आधार पर खोज करने की कोशिश मैं एक परिणाम लगता है, लेकिन अगर मैं 'मुंडो' या 'मुंडो' या 'कोशिश लामुन 'कोई मैच नहीं है।

क्या गलत है? मुझे समझ में नहीं आता

स्रोत http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html

मैं उपयोग कर रहा हूँ:

  • -django 1.5.1
  • -django-भूसे के ढेर == 2.1.0
  • -elasticsearch-0.90.5
  • - pyelasticsearch == 0.6

आपके उत्तर के लिए धन्यवाद wers-

उत्तर

4

जैसा कि आप EdgeNgramField का उपयोग कर रहे हैं, यह अपेक्षित व्यवहार है क्योंकि यह व्हाइटस्पेस पर मेल खाता है और क्वेरी में वर्णों से मेल खाने वाले ग्रंथों से मेल खाता है।

"laMun" या "mundo" क्वेरी के परिणाम प्राप्त करने के लिए आपको EdgeNgramField के बजाय NgramField का उपयोग करना चाहिए।

संबंधित मुद्दे