使用SearchVector查询时结果重复

问题描述

我有一个名为PostType的抽象模型类,其中包含一些派生自其的子模型。 该模型如下所示:


class PostType(models.Model):
    title = models.CharField(
        max_length=255,unique=True,verbose_name='Title'
    )
    description = models.CharField(
        max_length=255,default='',verbose_name='Description'
    )
    tags = models.ManyToManyField(
        to=Tag,blank=True,verbose_name='Tags'
    )
    content = RichTextUploadingField(
        default='',verbose_name='Post Content'
    )

    class Meta:
        abstract = True

它具有一个相关的Tag模型,如下所示:


class Tag(models.Model):
    name = models.CharField(
        max_length=255,verbose_name='Name',unique=True
    )
    description = models.TextField(
        verbose_name='Description',default=''
    )

在我的一种观点中,我试图使用SearchVector并搜索多个字段来查询所有子类:


query = request.GET.get('s')

from django.contrib.postgres.search import SearchVector
get_qs_list = [model.objects.annotate(
    search=SearchVector('title','description','content','tags__name')
).filter(search=query) for model in models.PostType.__subclasses__()]

现在,搜索将返回它应有的所有结果。但是,由于某些原因,它会返回 some 项的重复结果。

如果我从'tags__name'中删除SearchVector,问题似乎就消失了,但是我不明白为什么。

我在做什么错了,如果我不搜索相关字段,为什么还能正常工作?

编辑:

我刚刚意识到与该项目相关的每个Tag都会得到重复的结果。因此,如果该项目具有三个标签,我将在搜索结果中获得该项目的三个副本。我仍然不明白为什么会发生这种情况,我非常感谢您提供任何建议!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)