如何在Django中匹配字符串与数据库字段?
我有一个数据库,其中有一列叫做 name
,里面的数据像这样:
'Very big News'
'News'
'something else'
'New Nes'
'Fresh News'
'Something else'
现在,如果给我一个字符串,里面有几个单词,我该怎么查找这些单词中有没有出现在 name
这一列里呢?
举个例子:
我有一个字符串 'super very news'
。我需要在我的数据库里查找,看看有没有记录的 name
字段包含 'super'
、'very'
、'news'
,或者包含 'super very'
、'very news'
这样的组合。
2 个回答
0
如果你的单词列表很小而且简单,你可以自己写一个查找表和索引器;但如果单词列表比较大或者复杂,那你就需要一个像OpenFTS这样的全文数据库。
7
更新 根据评论的反馈。可以在这里查看查询集文档 这里。
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%'