2014-11-04 16 views
5

के साथ काम करने के लिए आंशिक शब्द खोज नहीं मिल सकता है। मैं आंशिक शब्द मिलान करने की कोशिश कर रहा हूं और मैंने पहले से ही related question देखा है लेकिन किसी कारण से मेरा सेटअप काम नहीं करता है। मैं elasticsearch के साथ घास का उपयोग कर रहा हूँ। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?हैस्टैक/लोचदार खोज

class VendorIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 
    company_name = indexes.CharField(model_attr='company_name', null=True) 

    def get_model(self): 
     return Vendor 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

संपादित करें: मैंने स्वत: पूर्ण उपयोग करके यह काम किया है। हालांकि, मुझे लगता है कि यह एक हैक है।

class VendorIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    company_name = indexes.CharField(model_attr='company_name', null=True) 
    company_name_auto = indexes.NgramField(model_attr='company_name') 
    def get_model(self): 
     return Vendor 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 
उसके बाद दृश्य में

:

class SearchVendorView(generics.ListAPIView): 
    serializer_class = serializers.CustomerVendorSerializer 

    def get_queryset(self): 
     results = SearchQuerySet().models(Vendor).autocomplete(company_name_auto=self.request.GET.get('q', '')) 
     vendors = [] 

     for vendor in [result.object for result in results]: 
      vendor.is_liked = Vendor.objects.from_request(self.request).get(pk=vendor.id).user_vote 
      vendors.append(vendor)  

     return vendors 

उत्तर

1

मेरे मामले में: लेकिन यहाँ मेरी कोड है django-haystack==2.5.1 + elasticsearch==5.0.1 + java elastic search daemon v2.3.1 इस आंशिक खोज पाने के लिए पर्याप्त है:

from haystack import indexes 
from authors.models import Author 


class AuthorIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 
    last_name = indexes.CharField(model_attr='last_name') 
    first_name = indexes.CharField(model_attr='first_name') 

    def get_model(self): 
     return Author 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

और फिर python manage.py rebuild_index और आप निम्न द्वारा खोज सकते हैं:

from haystack.query import SearchQuerySet 
SearchQuerySet().filter(content="alex") 

Alexander खोजने के लिए।

+0

क्या आप जानते हैं कि यह 'elasticsearch 1.x' पर काम करेगा या नहीं? –

+0

नाथन, नहीं, मैं कभी भी उपयोगकर्ता elasticsearch v.1 उपयोगकर्ता नहीं। – valex

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