3

Django 응용 프로그램에서 django-haystack + whoosh를 사용하려고합니다. 내 인덱스 클래스는이django-haystack SearchQuerySet을 사용하여 결과를 필터링하는 방법?

class ArticleIndex(indexes.SearchIndex, indexes.Indexable): 

text = indexes.CharField(document=True, use_template=True) 

title = indexes.CharField(model_attr='title') 

abstract = indexes.CharField(model_attr='abstract') 

def get_model(self): 
    return Article 

def index_queryset(self, using=None): 
    return self.get_model().objects.all() 

처럼 보이는 내 모델은 다음과 같습니다, 나는에 결과를 문서 모델을 쿼리하고 반환 아약스 검색 필드를 사용하고 내 템플릿에서

class Article(models.Model): 
title = models.CharField(max_length=100) 
authors = models.ManyToManyField(User) 
abstract = models.CharField(max_length=500, blank=True) 
full_text = models.TextField(blank=True) 
proquest_link = models.CharField(max_length=200, blank=True, null=True) 
ebsco_link = models.CharField(max_length=200, blank=True, null=True) 

def __unicode__(self): 
    return self.title 

같은 페이지. 본질적으로, ajax는 검색 텍스트가 포함 된 HttpPost 요청을 뷰로 시작합니다. 보기에서 나는 HttpPost를 통해 전송 된 검색 텍스트를 추상 필드에 포함하는 모든 Article 개체를 가져오고 싶습니다. 내 견해로는 검색 텍스트를 가져온 다음

search_text = request.POST['search_text'] 
articles = SearchQuerySet().filter(abstract=search_text) 

과 같은 모델을 얻으려고 시도하지만 어떤 결과도 반환하지 않습니다. 전화를 걸면

articles = SearchQuerySet().all() 

12 개의 모델 개체가 로컬 테스트 DB에 반환됩니다. 그러나 필터 함수는 결과를 반환하지 않습니다. 내가 원하는 것은

의 등가물입니다.
articles= Article.objects.filter(abstract__contains=search_text) 

어떤 제안이 있습니까? 일부 파고 후 당신에게

+0

'ArticleIndex'에서 변경된 후에'manage.py update_index'를 부르는 것을 잊지 않았습니까? – maciek

+0

나는 이것을 기억하지만 믿을 수 없다! – AndrewSmiley

답변

3

감사, I는 다음과 같이 내 인덱스 클래스를 업데이트 :

장고 - 건초 더미 2.1.0에 입력 indexes.CharField의 속성에) (.filter 사용에 문제가있다
class ArticleIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.NgramField(document=True, use_template=True) 
    title = indexes.NgramField(model_attr='title') 

    abstract = indexes.NgramField(model_attr='abstract') 

    def get_model(self): 
     return Article 

    def index_queryset(self, using=None): 
     return self.get_model().objects.all() 

. 어쩌면 누군가가 더 자세한 정보를 제공 할 수 있지만 이것이 저에게 효과적입니다.

관련 문제