【发布时间】:2021-01-17 22:35:32
【问题描述】:
平台:Linux 服务器上的 Django 1.1、Python 3.6,后端是 MySQL。
我正在追求一个相当常见的功能,但我需要指导从哪里/如何开始:
我有一个名为Article 的模型对象。我正在尝试实现一个搜索功能,该功能根据搜索词检索文章,然后根据搜索词中出现的单词进行排序。
在Article 中,我希望根据以下字段进行排序或“优先排序”:
- name, a text field
- keywords, also a text field but would contain comma-separated words
- article_text, a text area field that will contain the article itself
我想基本上将最相关的文章排序为最不相关的文章,根据在 article_text 中的名称、关键字和单词出现的搜索词输入。
在我的views.py 中,我有这个在request.POST 上触发的函数:
form_data['search_term'] = request.POST.get('search_term')
#removing question mark from term
search_term = search_term.replace("?","")
#Converting terms to a list of words, then converting all words to lowercase
search_terms_list = search_term.split(' ')
search_terms_list = [x.lower() for x in search_terms_list]
#Fetching results
results = Article.objects.filter(reduce(lambda x, y: x | y,
[Q(name__icontains=word) | Q(keywords__icontains=word) | Q(article_text__icontains=word) for
word in search_terms_list]))
我正在检索正确的结果,但根据文章 PK 进行排序,这是有道理的。有没有一种方法可以在无需使用 3rd 方插件的情况下实现上述目标?
【问题讨论】:
标签: python mysql python-3.x django