2017-03-23 13 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

try "sort = last_login desc"(またはasc)、フィールド名の前後に引用符はありません – 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のsolrに対する同じ要求はうまくいきます。これは私のスキーマファイルに問題がありますか? –

答えて

0

あなたが提供したURL http://127.0.0.1:8000/api/v1/search/facets/は直接SOLR URLではありません。それはあなたのミドルウェアでなければなりません。あなたがSolrに対して直接クエリを試して動作しているので、問題はミドルウェア層のどこかにある必要があります。

ログを印刷したり監視したりチェックしたりして、実際に生成されたミドルウェアのURLを確認し、動作している有効なURLと比較してみてください。

関連する問題