django - Django 中的简单搜索

标签 django search

我有一个非常简单的博客应用程序,我想为其添加一个非常简单的搜索功能。

我的模型有 3 个关键字段。

class BlogPost(models.Model):
    title = models.CharField(max_length=100) # the title
    intro = models.TextField(blank=True, null=True) # an extract
    content = models.TextField(blank=True, null=True) # full post

我不需要 Google。我不想搜索评论(无论如何,这些评论都保存在 Disqus 上)。我只想要一组按日期排名、关键字过滤的帖子。

我在 Google 上找到的有关某种形式的“django”和“搜索”的所有内容都带有极其复杂的 Haystack+后端解决方案。我不需要这些。我不想在低使用率的功能上消耗更多资源(在移植到 Django 之前我曾经有一个搜索框,每个月可能有 4 次搜索)。

我花时间在这里询问(而不是仅仅编写一个凌乱的小脚本)的原因是这已经存在于管理员中。您可以设置要搜索的列,然后只需搜索即可“正常工作”。

是否有某种方法可以处理管理员提供的搜索并将其拉入我面向用户的应用程序?

最佳答案

如果您想要一个非常简单的搜索,您可以使用 icontains查找和 Q object :

from django.db.models import Q
results = BlogPost.objects.filter(Q(title__icontains=your_search_query) | Q(intro__icontains=your_search_query) | Q(content__icontains=your_search_query))

您还应该注意,Haystack 不必“极其复杂”。您可以在不到 15 分钟的时间内通过 Whoosh 后端设置 haystack。

2016 年更新: 在版本 1.10 中,Django 添加了 a full text search support (仅限 PostgreSQL)。使用新模块对原始问题的答案可能如下所示:

from django.contrib.postgres.search import SearchVector

results = BlogPost.objects.annotate(
    search=SearchVector('title', 'intro', 'content'),
).filter(search=your_search_query)

新的全文搜索模块包含更多功能(例如按相关性排序),您可以read about them in the documentation .

关于django - Django 中的简单搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584502/

相关文章:

python - 接收错误: Reverse for with arguments '()' and keyword arguments not found

search - Solr block 连接子字段与扩展获取错误

python - 如何使Django Queryset选择组内具有最大值的记录

python - 从 django 模板 'int' 或 'str' 中确定值

Python/Django - Vcard 照片

linux - Ubuntu 16.4 中的 Elasticsearch 连接错误

javascript - 尝试使用数组和对象在 JavaScript 中创建字典

search - 如何在 Solr 中实现具有多个相关项的分面搜索建议?

java - 如何从输入文件中获取某些文本的行号?

python - 将代码放在 python 配置文件中是否有礼貌?