9

私は自分のサイトの検索ページにdjango-haystackを使用しています。私は基本的には完了しましたが、注文に満足しておらず、干し草の山がすべてを注文する方法をどのように決定するのかよくわかりません。

を使用してSearchQuerySetをオーバーライドできることはわかっていますorder_byが、それは完全にオーバーライドします。在庫のある商品(BooleanField)で検索を強制して、在庫のある商品が一番上に表示されるようにしたいが、それ以外は通常どおりに実行するとします。それ、どうやったら出来るの?

フィギュアコンテンツを試してみorder_by('-in_stock', 'content')ましたが、デフォルトで使用されていたものでしたが、独自の順序付けをそのままにしておく場合とは、結果が大きく異なります。

この件についてご意見をお寄せいただきありがとうございます。

4

2 に答える 2

19

search_indexes.pyにin_stockを含むインデックスが必要です。

class YourModel(indexes.SearchIndex):
    in_stock = indexes.BooleanField(model_attr='model_in_stock')

そしてあなたのURLで:

sqs = SearchQuerySet().models(YourModel).order_by('-in_stock', 'score') # score is a field of haystack

このようにして、在庫がある場合は最初に結果を表示し、次にスコアで表示します。

于 2010-06-23T21:32:33.583 に答える
2

CharFieldで並べ替えるには、保存可能にしますが、インデックス付けはできません。

sorted_name = indexes.CharField(indexed=False, stored=True)

並べ替えとインデックス作成が必要な場合は、SearchIndexで2つの異なるフィールドを使用してください。

于 2016-01-27T17:15:27.077 に答える