django haystack 中使用 Spatial Search order_by 的一个问题,djangohaystack,最近在使用haystac
django haystack 中使用 Spatial Search order_by 的一个问题,djangohaystack,最近在使用haystac
最近在使用haystack,具体就是计算周边一定范围内的场馆,并按照距离排序。
使用如下代码可以实现:
sqs = SearchQuerySet().dwithin('location', ninth_and_mass, D(mi=2)).distance('location', ninth_and_mass).order_by('distance')
但是,发现使用order_by的时候有一些限制,如果按照距离排序,必须把distance放在order_by的第一个位置,即order_by('distance', 'other_filed')
如果使用order_by('other_filed', 'distance'),结果会把other_filed的值当做距离值来处理。
例如我有一个字段count,当使用order_by('count', 'distance')的时候,结果计算出来的distance的值就是count的值。
如果反过来,使用order_by('distance', 'count'),结果正常,但是这种排序方式不是我想要的。
我是结合rest framework使用的,serializers使用了drf_haystack提供的HaystackSetializer:
class LocationSerializer(HaystackSerializer):
仔细查看了一个haystack的文档,发现一段说明:
You can not specify both a distance & lexicographic ordering. If you specify more than just distance or -distance, Haystack assumes distance is a field in the index & tries to sort on it.
http://django-haystack.readthedocs.org/en/v2.4.0/spatial.html#ordering
貌似是说不能同时使用distance和其它字段进行排序。
不知道大家有没有遇到类似的问题。
我现在的解决方法,是分两次取我需要的值,即以count进行分割,先把满足count一定条件的出去来,再取另一部分,然后再放到一起。
但没有找到连接两个SearchQuerySet()的方法,我是先转换成list,然后再拼接在一起的,但是这种方法的效率会很低,因为转成list的时候,会把SearchQuerySet()中的值全部取出来。如果结果集很大的话,势必会有性能上的问题。
下面是我的方法:
queryset_top_list = list(queryset_top) queryset_other_list = list(queryset_other) queryset_top_list.extend(queryset_other_list) queryset = queryset_top_list
不知道大家有没有好的方法。
多谢。
编橙之家文章,
相关内容
- flask如何备份和迁移mysql,flask迁移mysql,在flask的教程里
- 现在在写app服务器的一些功能,以前没有接触过服务器
- db.session.commit的时候,你会加 try except 吗,,
- python解析邮件BODYSTRUCTURE,,status, data
- xpath提取网页元素?,xpath提取元素,并不是伸手党。。
- python scrapy初始请求url设置的问题?,pythonscrapy,两种情
- chardet.detect无法获取字符编码,字符编码为乱码怎么办
- Python正则获取字符的问题,python获取字符,从下面类似的
- Beautiful Soup这个库有没有人使用?使用的人多吗?,b
- 一个关键词分组的问题,关键词分组问题,现有一组关键
评论关闭