0

django-haystackプロジェクトの 1 つで使用しており、このfaceting機能を使用してさまざまなフィールドのファセットを表示しています。現在、ファセットは次のようになっています。

Places

    - New York (51)
    - Los Angeles (22)
    - Chicago (20)
    - Houston (38)
    - Philadelphia (15)

Price Range (in USD)

    - $2000 - $4000 (10)
    - $4000 - $6000 (15)
    - $6000 - $10000 (8)
    - $10000 - $15000 (4)

現在、場所 (例: ニューヨーク) のいずれかのリンクをクリックすると、ファセット カウントPlacesが更新されます。それは次のようになります。

Places

    - New York (51)
    - Chicago (3)
    - Los Angeles (1)
    - Houston (0)
    - Philadelphia (0)

そして別の場所をクリックすると、ロサンゼルスなどのカウントが次のように変わります

Places

    - Los Angeles (22)
    - Philadelphia (3)
    - New York (1)
    - Chicago (0)
    - Houston (0)

私が探しているのは、選択したファセットをドリルダウンするのではなく、他のすべてのファセットをドリルダウンすることです。したがって、場所をクリックすると、場所ファセットは同じ順序のままで元のカウントを表示し、他のファセットはネストされた結果カウントを表示するようにします。上記の元のファセットの場所の 1 つをクリックすると、結果は次のようになります。(ニューヨークをクリックするとします:)

Places #The Original Count and order is maintained here

    - New York (51)
    - Los Angeles (22)
    - Chicago (20)
    - Houston (38)
    - Philadelphia (15)

Price Range (in USD) # This facet has the updated result count

    - $2000 - $4000 (2)
    - $4000 - $6000 (5)
    - $6000 - $10000 (1)
    - $10000 - $15000 (0)

どうすればこれを達成できますか?

ここでもスタックフローで同様の質問をしましたが、信頼できる答えは見つかりませんでした。

@DanielRosemanの回答は、ユーザーがファセットを介してリクエストを行うたびに空のクエリを再実行することを提案しています。リクエストごとに 2 つのクエリを作成することが非常に良いアイデアかどうかはわかりません。それはプロセス全体を遅くしませんか?

@Rich's answer は、初期カウントをセッションに保存し、それを各リクエストでコンテキストに渡すことを提案しています。これはより良い解決策のように思えますが、@StephenPaulger と同じ懸念があります。これは、ほとんどの場合、私たちの製品を使用しているユーザーが複数のブラウザー タブを開いているため、他のタブのカウントが台無しになるためです。

これを達成するために他にできることはありますか?なぜそのような重要な機能が haystack プロジェクト自体の一部ではないのでしょうか?

4

1 に答える 1

0

solr バックエンドを使用している場合は、次のようにファセットのフィルターの一部を無視することができます。

# facet by category but disregard any category filters on this query
squeryset = squeryset.facet('{!ex=category}category')  

あなたの場合、カテゴリを私が想像する場所に置き換えます(おそらくplaces_exactになります)

今、私はelasticsearchでこれを行う方法を考え出そうとしています

于 2014-03-31T12:40:14.067 に答える