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 に答える