【问题标题】:Search a column for multiple words using Django queryset使用 Django 查询集在列中搜索多个单词
【发布时间】:2012-05-21 03:33:24
【问题描述】:

我有一个自动完成框,它需要返回包含输入单词的结果。但是,输入的单词可以是部分的,并且可以位于不同的顺序或位置。

示例:

数据库列(MySQL)中的值-

Expected quarterly sales
Sales preceding quarter
Profit preceding quarter
Sales 12 months

现在如果用户输入quarter sales,那么它应该返回前两个结果。

我试过了:

column__icontains = term  #searches only '%quarter sales% and thus gives no results
column__search = term  #searches any of complete words and also returns last result
**{'ratio_name__icontains':each_term for each_term in term.split()}   #this searches only sales as it is the last keyword argument

任何通过正则表达式的技巧或者可能是我在 Django 中缺少的东西,因为这是一种常见的模式?

【问题讨论】:

  • 也许我弄错了,但这对我来说更像是一个全文搜索问题。你应该看看 MySQL 全文搜索,看看它是否符合你的需要。
  • 您是否尝试过使用任何搜索引擎?检查干草堆(haystacksearch.org)。它支持在开始时非常容易使用的嗖嗖声,还有更多
  • 嗨 Manoj,我确实尝试了全文搜索,但它返回的结果包含上述任何单词。例如,它还返回 12 个月的销售额(它不应该)。

标签: django django-queryset


【解决方案1】:

搜索引擎更适合这项任务,但您仍然可以使用基本代码来完成。 如果您要查找包含“A”和“B”的字符串,您可以

Model.objects.filter(string__contains='A').filter(string__contains='B')

Model.objects.filter(Q(string__contains='A') & Q(string__contains='B'))

但实际上,您最好使用配置很少的简单全文搜索引擎,例如 Haystack/Whoosh

【讨论】:

猜你喜欢
  • 2015-11-02
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多