I'm trying to get partial word match working and I've already looked at related question but for some reason my setup doesn't work. I'm using haystack with elasticsearch. Can someone please tell me what I'm 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've made this work by making use of autocomplete. However, I feel like this is 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