【问题标题】:searching textfield for each keyword搜索每个关键字的文本字段
【发布时间】:2015-08-14 03:27:46
【问题描述】:

现在,我的 views.py 函数允许我在每个 Django 文本字段中搜索整个搜索短语。但是,如果我想搜索标题和作者,例如“biology John”,我的查询集最终会是空的,我不知道如何分解短语并搜索单个单词。

def search(request):
    query = request.GET.get('search')
    if query:
        results = Protocol.objects.filter(Q(title__contains=query) | Q(author__contains=query) | Q(description__contains=query) | Q(reagents__contains=query) | Q(protocol_steps__contains=query))
    else:
        results = ''
    return render(request, 'protocat_app/search_protocols.html',{'results':results})

【问题讨论】:

标签: python django django-views django-queryset


【解决方案1】:

您绝对可以使用 solr/elasticsearch 设置 haystack。但是如果你仍然需要一些数据库查询,你可以使用以下:

import operator

def search(request):
    terms = request.GET.get('search', '').split(' ')
    q_list = []
    for term in terms:
        if term:
            q_list.append(Q(title__contains=query))
            q_list.append(Q(author__contains=query))
            q_list.append(Q(description__contains=query))
            q_list.append(Q(reagents__contains=query))
            q_list.append(Q(protocol_steps__contains=query))

    if q_list:
        results = Protocol.objects.filter(reduce(operator.or_, q_list))
    else:
        results = ''
    return render(request, 'protocat_app/search_protocols.html',{'results':results})

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    我建议设置像Solr/Elastic Search 这样的搜索服务器。 这里只有一种情况,您需要将查询拆分为 2 个字段。也许稍后您会遇到需要在多个索引字段中查找的情况。因此,Solr 会很有帮助。

    您可以阅读 Solr here

    另外,您可以利用django-haystack 让django 与Solr 进行交互,并根据用户搜索的内容获取过滤结果。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2015-09-05
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多