对于没有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,实现全文索引按标题和名称字段搜索是微不足道的,但据我所知,没有办法在没有特定人员审查的情况下查找论文所需的“左外连接”
答案 0 :(得分:1)
Haystack只是一个暴露几个不同搜索引擎后端的包装器:
可能还有其他后端可用作插件。
所以真正的问题是,是否有一个搜索后端为我提供了所需的功能,并且haystack是否公开了该功能?
答案是,你可以使用elasticsearch *,但请注意星号。
通常,在创建搜索索引时,最好以与创建无可靠数据库时相同的方式考虑文档,并希望这些文档尽可能平坦。
因此,一种可能性是在paperreview索引上有一个char字段数组。该数组将包含所有相关的外键引用。
另一种可能是在elasticsearch中使用“嵌套文档”。
最后,在elasticsearch中使用“父/子文档”。
您仍然可以使用haystack进行索引,但有些黑客攻击,但您可能希望直接使用其中一个原始后端,例如pyelasticsearch或pyes。
答案 1 :(得分:1)
我知道这个问题比较老了,但我最近花了一些时间对此进行调查并回答了这个问题但实际上并不太难以自己实现,并想分享。
我发现here实际上并没有捕获所有情况,例如部分单词(请参阅SearchVector/SearchQuery approach以供参考)。根据您的约束,您可以毫无困难地实现自己的工作。 例如,在一个视图中' get_queryset方法:
{{1}}
答案 2 :(得分:0)
我使用Haystack +弹性搜索,到目前为止它的工作非常好。不要以为它是微不足道的。如果论文与人之间存在关联,您可以轻松实现您的要求。
答案 3 :(得分:0)
我最终使用djorm-ext-pgfulltext,它为PostgreSQL的内置全文搜索功能提供了一个简单的Django界面。