2017-03-23 8 views
1

이미 인덱싱 된 일부 필드를 기반으로 solr에서 검색 결과를 정렬해야합니다. 내 현재 api 요청은 정렬하지 않고 이와 같습니다.인덱싱 된 필드를 기반으로 검색 결과를 정렬

http://127.0.0.1:8000/api/v1/search/facets/?page=1&gender=Male&age__gte=19

그리고 인덱스 순서에 따라 검색 결과를 제공합니다. 하지만 이미 인덱싱 된 DateTimeField 인 'last_login'을 기반으로이 결과를 재정렬해야합니다.

는 여기에 내가 'created_at'값으로 기본 검색 순서를 변경

class ProfileSearchView(FacetMixin, HaystackViewSet): 
    index_models = [Profile] 
    serializer_class = ProfileSearchSerializer 
    pagination_class = PageNumberPagination 

    facet_serializer_class = ProfileFacetSerializer 
    filter_backends = [HaystackFilter] 
    facet_filter_backends = [HaystackFilter, HaystackFacetFilter] 

    def get_queryset(self, index_models=None): 
     if not index_models: 
      index_models = [] 
     queryset = super(ProfileSearchView, self).get_queryset(index_models) 
     queryset = queryset.order_by('-created_at') 
     return queryset` 

여기 내 뷰셋입니다. 하지만 다음 요청에 대해서는 'last_login'값에 기반한 주문이 있습니다. 나는이

http://127.0.0.1:8000/api/v1/search/facets/?page=1&gender=Male&age__gte=19&sort= 'last_login'

처럼 내 요청에 새 매개 변수를 추가 한하지만 나에게 오류를 제공

SolrError: Solr responded with an error (HTTP 400): [Reason: undefined field sort]

나는 가능한이 순서를 달성 할 수있는 방법

? 해결책을 좀 도와주세요.

+1

"sort = last_login desc"(또는 오름차순)을 시도하십시오. 필드 이름 주위에 따옴표가 없습니다. – Persimmonium

+0

@Persimmonium 응답 해 주셔서 감사합니다. 나는 이것을 시도했지만 여전히 나에게 동일한 응답을 준다 'SolrError : Solr이 오류 (HTTP 400)로 응답했다 : [이유 : 정의되지 않은 필드 정렬]'. 이것이 제가 시도하는 것입니다. http://127.0.0.1:8000/api/v1/search/facets/?page=1&sort=last_login%20desc. –

+0

그러나 http : // localhost : 8983/solr/select? q = * : * & facet = true & sort = last_login % 20desc과 같은 요청은 잘 동작합니다. 이것이 내 스키마 파일에 문제가 있습니까? –

답변

0

제공하신 URL http://127.0.0.1:8000/api/v1/search/facets/은 (는) 직접적인 SOLR URL이 아닙니다. 그것은 당신의 미디웨어 여야합니다. Solr에 대해 직접 쿼리를 시도 했으므로 문제는 미들웨어 계층의 어딘가에 있어야합니다.

로그를 인쇄하거나 모니터링하거나 확인하여 실제로 생성되는 midde-ware의 URL을 확인하고 작동중인 유효한 URL과 비교해보십시오.