【问题标题】:Sorting filtered results based on word occurrence using Django Model Filter使用 Django 模型过滤器根据单词出现对过滤结果进行排序
【发布时间】: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


    【解决方案1】:

    我建议您创建一个表格,在其中保存文章以及在每篇文章中检索到单词的次数,然后按检索到的搜索词的次数对该表进行排序,以降序排列,并将其传递给您的模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多