I am trying to get a partial phrase, and I have already addressed the related question , but for some reason my setup does not work. I am using haystack with elasticsearch. Can someone please tell me what I am doing wrong?
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()
EDIT: I did this job using autocomplete. However, I feel like it's a hack. But here is my code:
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()
then in the view:
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
source share