6

私はこのようなモデルを持っています:

class MyModel(models.Model):
    desc1 = models.TextField(blank=True, default="")
    desc2 = models.TextField(blank=True, default="")

このモデルのフィールドで文字列を検索したい。MyModel のこれらのインスタンスを想定します。

1: desc1="ABc?", desc2="asdasd you"
2: desc1="Hello, How are you?", desc2="Thank you!"
3: desc1="ABc?", desc2="ajdf"

「あなた」を検索すると、最初と2番目のインスタンスが表示されます。最後に、desc1 の "you" が他より上位にある結果を表示する必要があります。たとえば、このサンプルでは、​​2 番目の値は最初の値より高くする必要があります。

検索に haystack を使用し、このためのテンプレートを作成しました。しかし、優先度の問題を解決できませんでした。

4

2 に答える 2

3

「優先度」と言うときは、検索の用語で「並べ替え」を意味します。

Django Haystackはフィールドの一致で並べ替えることができますが、アルゴリズムを使用して並べ替え順序を決定する「スコア」で並べ替えることができます。'Boost'ing itでスコアの重み付けに影響を与えることができます-http://django-haystack.readthedocs.org/en/latest/boost.htmlを参照して ください

また、search_indexes.pyに、重み付けのためだけのフィールドを追加することを検討する必要があります。Djangoモデルフィールドとインデックスの間に1対1のマッピングを行う必要はありません。何かのようなもの

class MyModelIndex(QueuedSearchIndex):
    desc1 = indexes.CharField()
    desc2 = indexes.CharField()
    otherWeightedField = indexes.CharField()

    def prepare_otherWeightedField(self,obj)
        # fill the extra field with extra stuff to help you sort, based on processing values from other fields
于 2012-07-26T18:23:03.057 に答える