2016-12-15 22 views
0

現在私のDjangoサイトの検索に取り掛かっています。質問を受け取り、投稿名と説明に表示されている時間を確認して、質問が表示された投稿で結果を返します(つまり、「車」を検索した場合、「自動車」を5回書いた記事は、「車」を一度記述する記事の前に表示されます)。フィルタ結果の総件数が

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 %} 

はしかし、それは降順でそれを整理しません

は、ここに私のviews.pyです。私がどこに間違っているかについてのアイデアは?

+0

昇順ですか?またはで注文? –

+0

全く指示されていないようです – ng150716

+0

'.distinct()'を削除してみてください。 order_byとdistinctを使用すると問題が発生しているようです。 (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#distinct) –

答えて

0

アドホックツールを検索目的で使用しないのはなぜですか?例えば、Django Postgres full text searchまたはDjango Haystackの方が、より複雑な検索とファセット処理が可能です(私の意見では、このツールにはいくつかの欠点があります。つまり、elasticsearchで作業しているときはElasticsearch DSLのPythonライブラリを使用します)。あなたが何らかの教育上の理由でこのように正確にケースを解決しようとするとごめんなさい。

+0

はい私はhaystackを探しています私は間違いなく今それらを見ていきますが、他のオプションのために。私は検索のノブのビットですが、haystackやElasticsearch DSLとビューのフィルタリングのような3つ目のツールを使用すると、大きなサイトに大きな違いがありますか? – ng150716

+0

はい、もちろんです。 elasticsearchやsphinxのような検索エンジンは、クエリ、多くのメトリック、フィルタ、並べ替えオプション、集約でより多くの柔軟性とパワーを提供します。そして最も重要なのは、それは検索結果を得点することです。しかし、小規模なプロジェクトでは、それは改ざんされ、エンジンサーバーやインデックスを管理するのが難しいかもしれません。だから私はpostgresのためにdjangoの全文検索を試してみることをお勧めします。大規模なprjectsでは、あなたは間違いなく別のソリューションを使用する必要があります。 –

+0

'' 'Stack.objects.filter( Q(name__icontains =クエリ)| Q(description__icontains =クエリ) ).annotate( name_occurance =カウント( '名前')、 desc_occurance =カウント( '説明')、 total_occurance = Sum( 'name_occurance'、 'desc_occurance') ).order_by( 'total_occurance') '' ' –

関連する問題