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

标签 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,实现按标题和名称字段搜索的全文索引很简单,但据我所知,没有办法在没有特定人员审阅的情况下进行查找论文所需的“左外连接” .

最佳答案

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

  • Solr
  • Elasticsearch
  • 嗖嗖
  • Xapian

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

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

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

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

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

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

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

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

关于python - 无需 Haystack 的高效 Django 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16794587/

相关文章:

python - 提取numpy矩阵的前n列

python - django有什么好的User-Agent解析插件

django - Django send_mail 函数中的 email_from 不起作用

django - Elasticsearch和auto_query

python - 取消堆叠数据框并保留列

python - groupby 并返回前 n 组的所有行

Django-Haystack 和 Solr 8.5.1

django - 如何让多个范围查询在Elasticsearch中工作?

python - 猜数游戏新功能

python - 星期一作为 WeekArchiveView 一周的第一天