1

我在 django-haystack 中订购时遇到一些问题>.<

情况是:我有产品模型,产品模型有 company_name 属性,这个属性也包含在 solr-haystack 中。

product_1.company name = "Cba ltd"
product_2.company_name = "Abc ltd"
product_3.company_name = "bac ltd"
product_4.company_name = "aac ltd"

sqs = SearchQuerySet().models(Product).order_by("company_name")

当我按公司名称搜索和订购时,结果是 [product_2, product_1, product_4, product_3]

系统先大写,大写完成后,继续小写。

如何在不检查大写或小写的情况下使其仅按字母顺序排列?结果应该是 [product_4, product_2, product_3, product_1]

感谢您在这种情况下帮助我。

干杯,

4

2 回答 2

3

您可以使用 extra 并将 'company_name' 传递给 lower()

这看起来像:

sqs = SearchQuerySet().models(Product).order_by("company_name").extra(select={'company_name': 'lower(company_name)'}).order_by('company_name')

希望这可以帮助!

于 2012-12-10T21:03:17.987 回答
0

按多值字段排序是没有意义的,分析的字符串是多值字段。

因此,使用用于排序的相同数据创建一个非分析字段:

class ProductIndex(indexes.SearchIndex, indexes.Indexable):
    company_name = indexes.EdgeNgramField(model_attr='company_name')
    company_name_raw = indexes.CharField(model_attr='company_name', indexed=False)

sqs = SearchQuerySet().models(Product).order_by('company_name_raw')

有关更多信息,请参阅文档

于 2016-11-07T03:40:28.647 回答