我在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]
谢谢你在这种情况下帮助我。欢呼声,
答案 0 :(得分:3)
您可以使用extra并将'company_name'传递给lower()
这看起来像是:
sqs = SearchQuerySet().models(Product).order_by("company_name").extra(select={'company_name': 'lower(company_name)'}).order_by('company_name')
希望这有帮助!
答案 1 :(得分: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')
有关详细信息,请参阅documentation。