我有一个非常简单的博客应用程序,我想为其添加一个非常简单的搜索功能。
我的模型有 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/