按总次数排序过滤结果

时间:2016-12-15 18:22:15

标签: python django

我目前正在搜索我的Django网站,想要查询,然后查看它在帖子名称和描述中显示的时间,并返回结果,其中查询最多显示在帖子上(即如果我搜索" car"一个提到5次的汽车的帖子应该出现在提到的帖子之前" car"一次)。

这是我的views.py:

def stack_list(request, query):
    context_dict = {}

    stacks_list = Stack.objects.filter(
        Q(name__icontains=query) | 
        Q(description__icontains=query)
    ).annotate(total_occurance=Count('name')+Count('description')
    ).order_by('total_occurance').distinct()

    context_dict['stacks_list'] = stacks_list

    return render(request, 'stack/index_search_results.html', context_dict)

和我的HTML:

{% for stack in stacks_list %}
    <p>{{ stack.name }}
    {{ stack.description }}</p>
{% endfor %}

但是,当我尝试查询时,它并没有按降序排列。关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:0)

为什么不使用临时工具进行搜索?例如,Django Postgres full text searchDjango Haystack用于更复杂的搜索和分面(在我看来,这个工具有一些缺点 - 因此,当我使用elasticsearch时,我使用Elasticsearch DSL python库) 。希望它有所帮助,对不起,如果您出于某些教育原因尝试以这种方式解决案例。