2

抱歉这个问题很简单(我是 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 仅检索 Category 字段。我希望类别显示为具有计数但不使用的方面:

url(r'^search/$', FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs), name='haystack_search'),

在我的 url.py 中。我正在使用自己的视图进行搜索。提前感谢您的回答!



我在用着:

  • 姜戈 1.4
  • 干草堆 1.2.7
  • 索尔 3.6.1
4

2 回答 2

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以显示其中的值以及计数。

于 2012-09-19T18:34:17.730 回答
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

于 2012-09-24T11:41:53.853 回答