没有Haystack的高效Django全文搜索

时间:2013-05-28 14:26:14

标签: python django django-haystack

对于没有Haystack的Django,数据库无关的全文搜索的下一个最佳选择是什么?

我有一个类似的模型:

class Paper(models.Model):
    title = models.CharField(max_length=1000)

class Person(models.Model):
    name = models.CharField(max_length=100)

class PaperReview(models.Model):
    paper = models.ForeignKey(Paper)
    person = models.ForeignKey(Person)

我需要按标题和评论者名称搜索论文,但我也想从一个人的角度进行搜索,找到他们有哪些论文但没有经过审核。使用Haystack,实现全文索引按标题和名称字段搜索是微不足道的,但据我所知,没有办法在没有特定人员审查的情况下查找论文所需的“左外连接”

4 个答案:

答案 0 :(得分:1)

Haystack只是一个暴露几个不同搜索引擎后端的包装器:

  • Solr的
  • ElasticSearch
  • 的Xapian

可能还有其他后端可用作插件。

所以真正的问题是,是否有一个搜索后端为我提供了所需的功能,并且haystack是否公开了该功能?

答案是,你可以使用elasticsearch *,但请注意星号。

通常,在创建搜索索引时,最好以与创建无可靠数据库时相同的方式考虑文档,并希望这些文档尽可能平坦。

因此,一种可能性是在paperreview索引上有一个char字段数组。该数组将包含所有相关的外键引用。

另一种可能是在elasticsearch中使用“嵌套文档”。

最后,在elasticsearch中使用“父/子文档”。

您仍然可以使用haystack进行索引,但有些黑客攻击,但您可能希望直接使用其中一个原始后端,例如pyelasticsearch或pyes。

答案 1 :(得分:1)

我知道这个问题比较老了,但我最近花了一些时间对此进行调查并回答了这个问题result但实际上并不太难以自己实现,并想分享。

我发现here实际上并没有捕获所有情况,例如部分单词(请参阅SearchVector/SearchQuery approach以供参考)。根据您的约束,您可以毫无困难地实现自己的工作。 例如,在一个视图中' get_queryset方法:

{{1}}

答案 2 :(得分:0)

我使用Haystack +弹性搜索,到目前为止它的工作非常好。不要以为它是微不足道的。如果论文与人之间存在关联,您可以轻松实现您的要求。

答案 3 :(得分:0)

我最终使用djorm-ext-pgfulltext,它为PostgreSQL的内置全文搜索功能提供了一个简单的Django界面。