2016-11-02 9 views
2

편집 : 게시물의 하단에서 더 많은 정보를 원하시면 ...장고 건초 더미 및 붕 검색 작업,하지만 SearchQuerySet 반환 0 결과

원래 질문 :

내가이에서와 같은 문제가있을 것 같다 (미해결) 질문 : django-haystack + Whoosh SearchQuerySet().all() always None

내가 내 장고 프로젝트에 붕과 건초 더미을 설정 한 모든 처음에는 잘 작동했다 (SearchQuerySet 결과를 반환하는 데 사용), 그러나 새로운 사용자 정의 검색 양식을 만들 수있는 중단 시도 후 (git에서 롤백 됨) 나타납니다. 해당 색인 생성 및 원래 검색 페이지는 여전히 정상적으로 작동하지만 SearchQuerySet()은 항상 0 개의 결과를 반환합니다.

실행 :

manage.py rebuild_index --verbosity=2 

올바르게 보여줍니다

Indexing 14 assets 
    indexed 1 - 14 of 14 (worker PID: 1234). 

이 색인 자산은 모든이 될 수는 정확하게 원래의 검색 폼에서의 검색.

그러나, 개방 장고 쉘과 실행은 :

from haystack.query import SearchQuerySet 
SearchQuerySet().all().count() 

항상 0를 반환!

관련 pip freeze :

  • 파이썬 3.5.2
  • 장고 1.9.3
  • 장고 - 건초 더미 2.5.0
  • 붕 2.7.4

/MyApp를/search_indexes .py :

from haystack import indexes 
from .models import Asset 

class AssetIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.NgramField(document=True, use_template=True) 
    asset_description = indexes.CharField(model_attr='asset_description') 
    manufacturer = indexes.CharField(model_attr='asset_manufacturer') 

    def get_model(self): 
     return Asset 

    def no_query_found(self): 
     return self.searchqueryset.exclude(content='foo') 

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

/myapp/templates/search/indexes/myapp/asset_text.txt :

{{ object.asset_description }} 
{{ object.asset_details }} 
{{ object.asset_manufacturer }} 
{{ object.asset_model }} 
... etc. 

/myapp/urls.py :

urlpatterns = [ 
    .... 
    url(r'^search/', include('haystack.urls')), 
    .... 
] 

편집 :

그래서 파고 Haystack 소스 코드는 어디에서 0이 왔는지 알았지 만 이유는 아닙니다!

/myvenv/Lib/site-packages/hackstack/query.py

class SearchQuerySet(object): 
    ... 

    def __len__(self): 
     if self._result_count is None: 
      self._result_count = self.query.get_count() 

     # Some backends give weird, false-y values here. Convert to zero. 
     if not self._result_count: 
      self._result_count = 0 

    # This needs to return the actual number of hits, not what's in the cache. 
    return self._result_count - self._ignored_result_count 

    .... 

어떤 INT에 0 변경 SearchQuerySet는 항상 INT를 반환하게,하지만 if not self._result_count 사실이 왜 나는 아직도 모른다 ...

답변

0

그것은이 이미 아직 해결 될 것으로보고 있지만이 된 건초 더미에서 벌레처럼 보이는 : 불행하게도

https://github.com/django-haystack/django-haystack/issues/1021

"텍스트"인덱스 필드는 N- 그램 또는 경우 EdgeNgram SearchQuerySet().count()SearchQuerySet().all().count() 반환합니다 0 필터를 지정하지 않으면 SearchQuerySet().all().exclude(content='thisshouldnotmatchanythingintheindex').count()은 인덱싱 된 개체의 총 수를 반환합니다.