【发布时间】:2014-05-13 01:19:55
【问题描述】:
我最近才开始学习 Django,所以如果这个问题对你来说太新手,请原谅我。
我在 Django 中实现了一个搜索功能。我在 MySQL DB 全文索引中创建,然后在我的书籍模型中创建了一个字段:search_keywords,我基本上存储了所有单词,包括书籍的标题和内容。然后我的搜索功能会做类似的事情:
search_keyword = self.request.GET.get('keywords')
if search_keyword:
# '*' is added for cases where user enters only part of the keyword
qs = qs.filter(keywords__search=search_keyword + '*')
但是,如果我的搜索查询是“intro”,而我知道有一个像“test.introduction”这样的词/术语(如果该术语只是“introduction”那么它可以正常工作),则上述方法不起作用。
然后当我尝试这个时:
qs = qs.filter(keywords__icontains=search_keyword)
它会找到“test.introduction”等。
所以我开始想知道为什么会这样。 '__search' 是否仅用于全字搜索?我知道 '__icontains' 的大小写是有道理的(不区分大小写并包含单词的一部分),但是为什么要麻烦在数据库中创建全文索引,以便我们可以在 Django 中使用 '__search'?这是速度优势(例如,在要搜索大量文本的情况下?还是我在这里完全遗漏了什么?
【问题讨论】:
-
不同的是,
__search不适用于JSON_FIELD