【问题标题】:django-haystack ordering - How do I handle this?django-haystack 订购 - 我该如何处理?
【发布时间】:2010-06-08 17:49:06
【问题描述】:

我正在使用 django-haystack 作为我网站上的搜索页面。我基本上完成了,但对订购不太满意,并且不太确定 haystack 是如何决定如何订购所有东西的。

我知道我可以使用 order_by 覆盖 SearchQuerySet,但这完全覆盖了它。假设我想强制搜索按库存 (BooleanField) 排序,以便库存产品显示在顶部,然后像往常一样执行其他所有操作。我该怎么做?

我尝试使用 order_by('-in_stock', 'content') 图形内容是它默认使用的内容,但它产生的结果与我让它自己排序时产生的结果截然不同。

感谢您对此事的任何意见!

【问题讨论】:

    标签: django search django-haystack


    【解决方案1】:

    您的 search_indexes.py 中必须有一个带有 in_stock 的索引:

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

    在您的网址中:

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

    这样,您首先显示有库存的结果,然后按分数显示!

    【讨论】:

    • 如果我的自定义字段恰好具有相同的名称“分数”怎么办?
    • 当前版本的 Haystack 是否可能不支持按分数排序?我有KeyError: No field named 'score'
    • 我刚刚检查了文档,它应该仍然可以工作,你能用dpaste.com向我展示更多你的代码吗?
    【解决方案2】:

    要对 CharField 进行排序,请使其可存储,但不可索引。

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

    如果您需要使其可排序和可索引,请在 SearchIndex 中使用两个不同的字段。

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2017-09-14
      • 2010-09-23
      • 2021-01-21
      相关资源
      最近更新 更多