0

Haystack からの検索結果をグループ化しようとしています。モデル (アーティストまたは絵画)、日付フィールド (作成)、理想的にはブール フィールド (販売) でグループ化する必要があります。

つまり、次のようなものですが、機能していません。テンプレートに渡される前に、 SearchView をオーバーライドして何らかの方法でクエリを処理する必要があると思いますが、方法がわかりません。

それとも、テンプレートでグループ化を行うべきでしょうか?

def get_queryset():
    q = SearchQuerySet().filter(display=True).order_by('-created')

    paintings_unsold = q.models(Painting).filter(sold=False)
    paintings_sold = q.models(Painting).filter(sold=True)
    artists = q.models(Artist)

    return paintings_unsold | paintings_sold | artists


urlpatterns += patterns(
    '',
    (r'^search/', SearchView(
         searchqueryset=get_queryset()
    ))
)
4

1 に答える 1

0

ファセットは結果のグループ化と同じではないことを明確にするために。SOLR はこれを行うことができます。たとえば (バージョン 4): https://cwiki.apache.org/confluence/display/solr/Result+Grouping

しかし、コメントに記載されているように、実際に求めているのはファセットです。

http://django-haystack.readthedocs.org/en/v2.4.0/faceting.html https://cwiki.apache.org/confluence/display/solr/Faceting

質問がWhooshでタグ付けされていても、SOLRの回答を提供します。それはまだ役立つかもしれません。


soldフィールドと、artist_exactおそらく作成する必要があるフィールドでファセットを作成したいと考えています。タイプである必要がありstringます。そうしないと、ファセットが奇妙に見えます。

したがって、現在のartistフィールドはおそらく (推奨) 入力をトークン化するテキスト フィールドです。トークン化しない新しいフィールドとschema.xml、アーティストをこの新しいフィールドにコピーするコピー ディレクティブを追加するだけです。

<field name="artist" type="text_general" indexed="true" stored="true"/>
<field name="artist_exact" type="string" indexed="true" stored="false"/>
<copyField source="artist" dest="artist_exact" />

solrconfig.xmlのパラメーターを検索ハンドラーに追加します。

<str name="facet">on</str>
<str name="facet.field">sold</str>
<str name="facet.field">artist_exact</str>

Haystack は、使用できる FacetedSearchView を提供します。ファセット情報をテンプレート コンテキストに追加します。

于 2015-07-20T17:49:22.050 に答える