【问题标题】:missing explanation from haystack document干草堆文档中缺少解释
【发布时间】:2012-04-16 11:53:24
【问题描述】:

我是整个搜索的新手,很难学习 haystack。(solr 作为后端)

这是我对 haystack/solr 的理解。
如果我的理解有误,请评论。

Solr
solr 是文档搜索引擎。 (与 RDBMS 相对)
它允许用户快速搜索给定术语的文档。(可以使用倒排索引)
solr 还允许在文档结构良好的情况下进行构面搜索。(如在 xml 中)

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

问题来了。

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

  2. 假设我有如下的数据库模型,我的 search_indexes.py 会是什么样子来启用任何类别的分面搜索?

...

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)

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

【问题讨论】:

  • 在代码之前,开始一个带有内容的新段落或<p></p>以分隔列表和代码;或将代码缩进两次(8 个空格)
  • @okm:感谢您的编辑修复!

标签: django solr indexing django-haystack


【解决方案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。

【讨论】:

  • 我看到的问题是类别本身可以有父类别。如何在 search_indexes.py 中合并?
  • @Eugene 这取决于您的使用情况。在搜索页面中,是否要显示匹配项目类别的父类别。通常它是不必要的,因为父类别的方面计数等于其子类别的方面计数之和。
  • 我想先展示顶级类别,然后让用户深入了解子类别(你可以称之为方面),我很难写我的 *_text.txt(模板文本字段)以及如何向用户呈现类别(方面)名称。
  • @Eugene 那么你也可以在prepare_categories中返回父母类别
  • 我几乎放弃了它。你似乎暗示这是可能的。某种意义上的折磨..(谢谢你的帮助!)我想我苦苦挣扎的原因是我对 haystack 如何为 solr 索引格式化数据,或者我的前端如何查询索引数据的想法太模糊了.
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多