2012-09-19 41 views
2

對不起noobish的問題(我是Django的新手),但我想知道如何使用Django,Haystack和Solr只從一個字段檢索數據。例如: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) 

問題來了:我怎樣才能用草堆只檢索類別字段。我想要的類別顯示爲與數方面,但沒有使用:

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

我使用我自己的觀點來進行搜索。預先感謝您的回答!



我使用:

  • 的Django 1.4
  • 草堆1.2.7
  • 的Solr 3.6.1

回答

0

確定這是我如何解決了這個問題 - 我用蒂埃裏疊片代碼,但修改了一點:

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()) 

接下來,閱讀面變量,它是字典我在模板這樣做(新變量類別實際上是facets字典):http://tny.cz/40a7bf82

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迭代與計數一起顯示在它的值。

+0

我在django shell中試過這個,它似乎導致錯誤:使用'*:*'查詢Solr失敗 - 現在標題中顯示html部分:Error 400個未定義字段:「Web」。訪問/ solr/select時出現問題。原因未定義字段「Web」。另一個錯誤出現在下面:KeyError ['fields'] – dark4p

+0

也許是因爲字段類別被索引爲MultivalueField,這個錯誤出現了嗎? – dark4p