2014-11-04 1 views
5

부분 일치 단어 일치를 시도하고 있는데 이미 related question을 보았습니다. 그러나 어떤 이유로 내 설정이 작동하지 않습니다. 나는 elasticsearch와 함께 건초 더미를 사용하고 있습니다. 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?haystack/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

Nathan, 아니, 결코 사용자 elasticsearch v.1. – valex

관련 문제