Django Haystack只从solr中检索一个字段

时间:2012-09-19 14:29:16

标签: django solr django-haystack

对于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.我正在使用自己的视图进行搜索。提前感谢您的回答!



我正在使用:

  • Django 1.4
  • Haystack 1.2.7
  • Solr 3.6.1

2 个答案:

答案 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