繁体   English   中英

我希望我的搜索 function 能够在我的数据库中获取多个单词而不是一个单词,或者精确的句子匹配

[英]I want my search function to be able to take multiple words rather than just one word, or exact sentence match in my database

这是我的搜索栏 function:

`

def searchbar(request):
    if request.method == "GET":
        search = request.GET["search"],
        deity = Deity.objects.filter(Q(name__contains=search[0])|Q(location__contains=search[0])|Q(alt_name__contains=search[0])|Q(culture__contains=search[0])|Q(religion__contains=search[0])|Q(description__contains=search[0])|Q(pop_culture__contains=search[0])),

        context = {
            "user": User.objects.get(id = request.session['user_id']),
            "deity": deity,
            "search": search[0],
        }
        return render(request, 'search_results.html', context)
`

我的导航栏有一个搜索文本框和按钮,它会在整个数据库中搜索我放入搜索栏中的确切内容(大写除外,这似乎无关紧要)。 但是,如果我输入一个句子,它会占用整个句子并搜索它,而不会识别搜索中的单个单词。 我怎样才能解决这个问题?

SQLite不支持区分大小写的LIKE语句。 这就是为什么包含类似SQLite的图标的行为。 有关详细信息,请参阅数据库说明

以及您没有得到正确结果的原因是因为您使用search[0]仅搜索第一个字符。
所以你可以尝试这样的事情:

deity = Deity.objects.filter(Q(name__contains=search)
                         | Q(alt_name__contains=search)
                         | Q(culture__contains=search)
                         | Q(religion__contains=search)
                         | Q(description__contains=search)
                         | Q(pop_culture__contains=search))

如果您使用search[0]而不是search ,如果您提交表单而不在搜索框中输入任何内容,则会string index out of range异常 因此,为了安全起见,请始终确保传入的查询不为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM