根据索引字段对solr搜索结果进行排序

时间:2017-03-23 05:35:00

标签: solr django-haystack faceted-search

我必须根据已编入索引的某些字段从solr订购搜索结果。 我当前的api请求是这样的,没有排序。

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

它根据索引顺序提供搜索结果。但我必须根据已经编入索引的DateTimeField的'last_login'重新排序此结果。

这是我的观点

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`

这里我已经通过'created_at'值更改了默认搜索顺序。但是对于下一个请求,我根据'last_login'值进行了订购。我在我的请求中添加了一个新参数,如此

  

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

但它给了我一个错误

  

SolrError:Solr响应错误(HTTP 400):[原因:未定义字段排序]

如何实现这种排序?请帮我解决一下。

1 个答案:

答案 0 :(得分:0)

您提供的网址http://127.0.0.1:8000/api/v1/search/facets/不是直接的SOLR网址。它一定是你的中间件。既然您已经直接针对Solr尝试了查询并且它可以正常工作,那么问题必定存在于中间层中。

尝试打印或监控或检查日志,以查看middeware实际生成的URL,并将其与您知道的有效URL进行比较。