我正在为django中的页面编写一个小型搜索引擎。
我的查询代码:
sterm = request.GET.get('searchterm')
books = Book.objects.filter(title__iregex=r"\y{0}\y".format(sterm))
此代码的一个问题是,如果我搜索"python test"
,它只会向我提供标题中包含"python test"
的图书。但我还需要标题中只有"python"
或"test"
的图书。我知道,我可以使用Q
。但我需要一些有效的查找,我正在考虑这个逻辑:
sterms = sterm.split()
if len(sterms) == 1:
books = Book.objects.filter(title__iregex=r"\y{0}\y".format(sterm))
else:
for each in sterms:
## how can I gather here all Q's?
#then this?
books = Book.objects.filter("gathered Q's with |")
如何收集Q
过滤器,然后将其传递给查询?我对这个逻辑没问题,还是有更高效,更冷静的方式呢?
答案 0 :(得分:1)
您可以在How to dynamically compose an OR query filter in Django?了解如何进行动态OR一起查询。
你需要这样做吗?不区分大小写的正则表达式查询非常慢。
您是否将PostgreSQL用于数据存储?如果是这样,您可以调查全文索引功能。这将为您提供更快的方式来执行这些类型的搜索。