如何在django中执行此搜索逻辑

时间:2014-03-19 07:22:53

标签: python django

我正在为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过滤器,然后将其传递给查询?我对这个逻辑没问题,还是有更高效,更冷静的方式呢?

1 个答案:

答案 0 :(得分:1)

您可以在How to dynamically compose an OR query filter in Django?了解如何进行动态OR一起查询。

你需要这样做吗?不区分大小写的正则表达式查询非常慢。

您是否将PostgreSQL用于数据存储?如果是这样,您可以调查全文索引功能。这将为您提供更快的方式来执行这些类型的搜索。