Skip to main content
 首页 » 编程设计

python之无需 Haystack 的高效 Django 全文搜索

2024年11月01日21jillzhang

没有 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,实现全文索引以按标题和名称字段搜索是微不足道的,但据我所知,如果没有特定人员的审阅,就无法执行查找论文所需的“左外部连接” .

请您参考如下方法:

Haystack 只是一个包装器,它公开了一些不同的搜索引擎后端:

  • 太阳能
  • Elasticsearch
  • 呼呼
  • Xapian

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

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

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

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

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

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

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

您仍然可以使用 haystack 进行索引,但您可能希望直接使用原始后端之一,例如 pyelasticsearch 或 pyes。