如何在Django中匹配字符串与数据库字段?

时间:2010-07-15 20:43:48

标签: python django django-models

我的数据库中name列的数据类似于

'Very big News'
'News'
'something else'
'New Nes'
'Fresh News'
'Something else'

现在给出一串单词,如何找到给定字符串中的任何单词是否包含在name字段中?

例如:

我有一个字符串'super very news'。我需要查看我的数据库,看看我是否有任何记录,name字段包含'super''very''news''super very'或{ {1}}。

2 个答案:

答案 0 :(得分:6)

根据评论

更新。请参阅查询集docs here

your_search_query = 'super very news'

qset = Q()
for term in your_search_query.split():
    qset |= Q(name__contains=term)

matching_results = YourModel.objects.filter(qset)

这相当于:

matching_result = YourModel.objects.filter(Q(name__contains='super') |
                                           Q(name__contains='very') |   
                                           Q(name__contains='news'))

在单个查询中生成(大致)以下SQL:

 select * from your_model where name like '%super%' or name like '%very%' or name like '%news%'

答案 1 :(得分:0)

如果您的单词列表很小且很简单,您可以编写自己的查找表和索引器,否则您需要一个像OpenFTS这样的全文数据库:

http://openfts.sourceforge.net/