对于noobish问题感到抱歉(我是Django的新手)但我想知道如何使用Django,Haystack和Solr从一个字段中检索数据。例如:
我有两种模式:
class Category(models.Model):
name = models.CharField("Category name", max_length=255)
class Post(models.Model):
title = models.CharField("Post title", max_length=255)
category = models.ManyToManyField(Category, related_name="category")
我将Post模型编入索引:
class PostIndex(SearchIndex):
text = CharField(document=True, use_template=True)
title = EdgeNgramField(model_attr='title')
category = FacetMultiValueField()
def get_model(self):
return Post
def prepare_category(self, obj):
return obj.category.all()
def index_queryset(self):
return self.get_model().objects.all()
site.register(Post, PostIndex)
问题在于:如何使用Haystack仅检索“类别”字段。我希望类别显示为带有计数的构面但不使用:
url(r'^search/$', FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs), name='haystack_search'),
在我的url.py.我正在使用自己的视图进行搜索。提前感谢您的回答!
我正在使用:
答案 0 :(得分:1)
您可以尝试以下操作:
from haystack.query import SearchQuerySet
categories = Category.objects.all()
sqs = SearchQuerySet()
facets = {}
for category in categories:
facets.update(sqs.facet(category.name).facet_counts()['fields'])
您可以在模板中迭代facets
,以显示其中的值以及计数。
答案 1 :(得分:0)
好的,这就是我如何解决这个问题 - 我使用了Thierry Lams代码但稍微修改了一下:
from haystack.query import SearchQuerySet
from myapp.models import Category
categories = Category.objects.all()
sqs = SearchQuerySet()
facets = {}
for category in categories:
facets.update(sqs.facet('category').facet_counts())
接下来,要读取facet变量,即我在模板中执行此操作的字典(新变量类别实际上是facets字典):http://tny.cz/40a7bf82