gpt4 book ai didi

django - 如何使用 django-haystack SearchQuerySet 过滤结果?

转载 作者:行者123 更新时间:2023-12-02 00:02:27 26 4
gpt4 key购买 nike

我正在尝试在我的 Django 应用程序中使用 django-haystack + whoosh。我的索引类看起来像这样

class ArticleIndex(indexes.SearchIndex, indexes.Indexable):

text = indexes.CharField(document=True, use_template=True)

title = indexes.CharField(model_attr='title')

abstract = indexes.CharField(model_attr='abstract')

def get_model(self):
return Article

def index_queryset(self, using=None):
return self.get_model().objects.all()

我的模型是这样的:

class Article(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(User)
abstract = models.CharField(max_length=500, blank=True)
full_text = models.TextField(blank=True)
proquest_link = models.CharField(max_length=200, blank=True, null=True)
ebsco_link = models.CharField(max_length=200, blank=True, null=True)

def __unicode__(self):
return self.title

在我的模板中,我使用 ajax 搜索字段来查询文章模型并在同一页面中返回结果。本质上,ajax 触发一个包含 View 搜索文本的 HttpPost 请求。在 View 中,我想获取所有 Article 对象,其抽象字段包含通过 HttpPost 发送的搜索文本。在我看来,我正在获取搜索文本,然后尝试获取类似

的模型
search_text = request.POST['search_text']
articles = SearchQuerySet().filter(abstract=search_text)

但它没有返回任何结果。如果我打电话

articles = SearchQuerySet().all()

它将返回本地测试数据库中的 12 个模型对象。但是,过滤器函数不返回任何结果。我要做的相当于

articles= Article.objects.filter(abstract__contains=search_text)

有什么建议吗?谢谢

最佳答案

经过一番挖掘,我将索引类更新为如下所示:

class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.NgramField(document=True, use_template=True)
title = indexes.NgramField(model_attr='title')

abstract = indexes.NgramField(model_attr='abstract')

def get_model(self):
return Article

def index_queryset(self, using=None):
return self.get_model().objects.all()

在 django-haystack 2.1.0 中对 indexes.CharField 类型的属性使用 .filter() 有问题。也许有人可以提供更多细节,但这对我有用。

关于django - 如何使用 django-haystack SearchQuerySet 过滤结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com