【发布时间】:2018-03-06 00:13:38
【问题描述】:
我需要根据 Django ORM 中的匹配长度对结果进行排序。
我有一个Suburb 表,在name 字段中有位置详细信息。
我需要用给定的文本搜索表格,并按完全匹配/最突出的匹配排序为顶部
例如:
1) 如果搜索字符串是 'America',那么结果应该是 [America, South America, North America ..] 在这种情况下,我们找到了一个完全匹配,它必须是第一个元素。
2) 如果搜索是port,那么结果应该是['Port Melbourne' 'Portsea', East Airport]
在这种情况下,我们发现端口在分隔符之前是完全匹配的。
我知道我可以使用多个查询并加入它们,比如一个用于完全匹配,另一个用于部分匹配,然后在部分匹配时使用排除加入它们就像
search_list= [x.name for x in Suburb.objects.filter(name=search)]
# Then
search_list += [x.name for x in Suburb.objects.filter(name__iregex=r"[[:<:]]{0}".format(search)).exclude(name__in=search_list)]
我可以这样继续下去。但想知道我们是否有更好的方法。
有什么线索吗?
提前致谢
【问题讨论】:
-
你使用哪个数据库?
-
我正在使用 MySQL。通过使用 python,我得到了一个可行的解决方案。会尝试你的建议。不过我想在 ORM 中使用它
标签: python django django-queryset django-orm