我遇到問題narrowing
我的SearchQuerySet
方面有空間。Django Haystack:縮小方面的空間不縮小
我使用Django的草垛與ElasticSearch
我有以下指標:
class ProductIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
category = indexes.MultiValueField(faceted=True) # m2m field
weight = indexes.MultiValueField(faceted=True, null=True)
title_auto = indexes.EdgeNgramField(model_attr='title') # for autocomplete
def get_model(self):
return Product
def prepare_category(self, obj):
return [(cat.title) for cat in obj.categories.all()]
def prepare_weight(self, obj):
return [(meta.value) for meta in obj.productmeta_set.filter(label="weight")]
但是,試圖對其進行查詢時,我得到了一些非常奇怪的結果:
總方面計數:
>>> sqs = SearchQuerySet().all().facet("category")
>>> sqs.facet_counts()
{'fields': {'category': [(u'Wall Tiles', 1028), (u'Floor Tiles', 440), (u'Baths', 49), (u'Basins', 25), (u'Toilets', 19)]}, 'dates': {}, 'queries': {}}
我設法得到了正確的值對於牆磚,像這樣:
>>> sqs.narrow("category:%s" % sqs.query.clean("Wall Tiles")).count()
1028 # correct value
(這是用在FacetedSearchForm使用的方法)
但奇怪的是,如果我使用的地磚同樣的方法我仍然得到所有的瓷磚:
>>> sqs.narrow("category:%s" % sqs.query.clean("Floor Tiles")).count()
1468 # incorrect (count of floor tiles + wall tiles)
更奇怪的是,如果我將上面的Wall Tiles查詢更改爲使用_exact
,它將返回兩者的數量!
>>> sqs.narrow("category_exact:%s" % sqs.query.clean("Wall Tiles")).count()
1468
它適用於沒有空間的類別。
我確定我在這裏錯過了一些基本的東西..但是我不能爲我的生活看到爲什麼我會得到這樣奇怪的結果!
我打算把這個標記爲答案,儘管我最終採取了不同的方法。這是一個更正確的方法。 我所做的就是在'_prepare()'方法中對我的分面字段進行'slugify'。然後我添加了一個'deslugify'模板標籤來處理前端中各個方面的顯示。 – toast38coza