我有这个型号(django-oscar产品):
class Product(AbstractProduct):
# ...
price_display = models.DecimalField(decimal_places=2, max_digits=12, blank=True, null=True)
# ...
由haystack索引:
class ProductIndex(indexes.SearchIndex, indexes.Indexable):
# ...
price = indexes.DecimalField(null=True)
# ...
def prepare_price(self, obj):
return obj.price_display or Decimal('0.0')
Haystack由elasticsearch支持
pip freeze | grep elastic
elasticsearch==1.6.0
pyelasticsearch==1.4
pip freeze | grep hays
django-haystack==2.1.0
现在这个查询集:
# ...
qs = qs.filter(text__contains=q)
qs = qs.order_by('price')
返回以这种方式订购的价格的(正确找到的)对象:
120 130 24 300 ... 9
无法弄清楚出了什么问题......
答案 0 :(得分:1)
Haystack(至少我正在使用的版本)将一个Decimal字段发送到弹性作为: “价格”:{ “类型”: “字符串”, “存储”:真 “term_vector”: “with_positions_offsets”, “分析器”: “雪球”},
所以它看起来不像一个字符串,它正在订购一个字符串......
我已经改变了我的代码以使用浮点数,而不是这个问题,我们现在不再谈钱了。
price = indexes.FloatField(null=True)
def prepare_price(self, obj):
if obj.price_display:
return float(str(obj.price_display))
return float('0.0')
现在它将字段发送为: “价格”:{ “类型”: “浮动”, “索引”: “分析”, “商店”:真},
和订购工作,yay