2013-08-01 10 views
8

ऐसा लगता है कि लोचदार खोज फ़ज़ी प्रश्नों का समर्थन करता है (http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/) लेकिन मैं उस विकल्प में django-haystack पास करने का कोई तरीका नहीं समझ सकता।मैं django-haystack और elasticsearch बैकएंड का उपयोग कर एक अस्पष्ट खोज कैसे कर सकता हूं?

मैंने django-haystack खोज में खोला और ऐसा लगता है कि यह elasticsearch बैकएंड का उपयोग करते समय 'match_all' क्वेरी का उपयोग कर रहा है। क्या django-haystack स्रोत कोड को संशोधित किए बिना अस्पष्ट मिलान व्यवहार प्राप्त करना संभव है?

Haystack स्रोत: https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py

+0

दान, क्या आपने इस पर कोई प्रगति की है? – Alp

+1

@ एएलपी - हाँ। मैं बेनिलोप के सुझाव का उपयोग कर समाप्त हुआ, हालांकि मुझे यह अनुरोध करने के लिए काफी समय लगा कि अनुरोध को कैसे व्यवस्थित किया जाए और किस बिंदु को इसे प्रस्तुत करना भी है। मुझे तब एहसास हुआ कि यह कॉन्फ़िगर करने योग्य नहीं था जैसा कि मैं चाहता था इसलिए मैंने कुछ कदम पीछे ले लिया और खोज परिणामों का एक बड़ा सेट वापस प्राप्त कर लिया और फिर अपने स्वयं के "अस्पष्ट" एल्गोरिदम के साथ जा रहा था। –

उत्तर

6

Haystack कांटा करने के लिए कोई ज़रूरत नहीं, आप अपने खुद के बैकएंड में है कि विधि को अपडेट कर सकते हैं (अधिक जानकारी के लिए, Stretching Haystack's ElasticSearch Backend देखें) (build_search_kwargs विधि मैं क्या संदेह है मैं बदलने की जरूरत है)। build_search_kwargs विधि एक शब्दकोश देता है ताकि आप मूल वापसी मान को संशोधित कर सकें।

अस्वीकरण: इस कोड कितना आप अपने खुद के बैकएंड, फजी खोज लागू करने के लिए कैसे नहीं अद्यतन कर सकता का एक उदाहरण है।

class FuzzyBackend(ElasticsearchSearchBackend): 
    def build_search_kwargs(self, query_string, **kwargs): 
     fuzzy = kwargs.pop('fuzzy', False) 
     fuzzy_field = kwargs.pop('min_similarity', '') 
     search_kwargs = super(FuzzyBackend, self).build_search_kwargs(
       query_string, kwargs) 
     if fuzzy: 
      search_kwargs = {'fuzzy': {fuzzy_field: query_string}} 
     return search_kwargs 
+1

यह एक अच्छा दृष्टिकोण है - इसका सुझाव देने के लिए धन्यवाद। मैं इसे एकीकृत करने की कोशिश करूंगा और आपको बता दूंगा कि यह कैसा चल रहा है। –

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

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