干草堆文件中缺少解释

时间:2012-04-16 11:53:24

标签: django solr indexing django-haystack

我对整个搜索工作都很陌生并且很难学习干草堆。(solr as backend)

以下是我对haystack / solr的理解。
如果我的理解是错误的,请评论它。

Solr的
solr是文档搜索引擎。 (反对RDBMS)
它允许用户快速搜索给定术语的文档。(反向索引可用于此)
solr还允许方面搜索,因为文档结构良好。(如在xml中)

草堆
对于某些应用程序(例如eCommerse站点),将产品数据存储在RDBMS中是个好主意。(xml也可以工作,但我只是猜测RDBMS更新比xml更好)
如果我们将产品数据存储在RDBMS中,我们可以编写查询来获取用户查询的相关数据,但这很麻烦。
Haystack可以将RDBMS中的数据转换为文档,以便solr可以将其编入索引。 solr索引数据后,大部分搜索都可以委托给solr。

问题就在这里。

  1. 我可以根据需要创建数据库架构并仍使用haystack / solr吗?

  2. 假设我有以下数据库模型,我的search_indexes.py会对所有类别启用分面搜索是什么样的?

  3. ...

    class Category(models.Model):   
        name = models.CharField(max_length=200)  
        parentCategory = models.ForeignKey('self', null=True, blank=True)
    
    class Item(models.Model):   
        name = models.CharField(max_length=200)  
        categorys = models.ManyToManyField(Category)  
        details = models.CharField(max_length=1024)
    

    注意,类别可以嵌套(类别可以有父类别)。

1 个答案:

答案 0 :(得分:1)

Haystack正如其简要说明的那样,模块化搜索Django 。它侧重于简化构建站点搜索和维护索引的方式,并且做得很好。没有任何意义可以将它与通用Django ORM进行比较,尽管它们的搜索功能在某种程度上重叠 对于您的模型,由于Item()属于多个类别,您可以尝试FacetMultiValueField

# in models.py
class Category(models.Model):
    # add __unicode__ method
    def __unicode__(self):
        return self.name

# in search_indexes.py
from haystack.indexes import *
class ItemIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    name = CharField(model_attr='name')
    categories = FacetMultiValueField() # or MultiValueField w/ facet=True

    def prepare_categories(self, obj):
        return obj.categories.all()

按照http://django-haystack.readthedocs.org/en/latest/faceting.html在视图中操作SearchQuerySet。

相关问题