如何订购使用'__icontains'过滤的django查询集,以便首先获得完全匹配的结果

时间:2016-05-23 17:09:55

标签: django database python-2.7 django-models

我在django中编写一个简单的应用程序,用于搜索数据库中的记录。 用户在搜索字段中输入名称,该查询用于使用特定字段(如

)过滤记录
Result = Users.objects.filter(name__icontains=query_from_searchbox)

E.g。 - 数据库由名字 - Shiv,Shivam,Shivendra,Kashiva,Varun ......等组成。

搜索查询'shiv'按以下顺序返回记录 -

  

Kahiva,Shivam,Shiv和Shivendra

按主键排序。

我的问题是如何实现订单 -

  

Shiv,Shivam,Shivendra和Kashiva。

我的意思是最相关的,然后是较不相关的结果。

1 个答案:

答案 0 :(得分:0)

使用标准Django不可能做到这一点,因为这种类型的东西超出了范围和范围。特定于搜索应用程序。

当您与ORM交互时,请考虑您对数据库的实际操作 - 它只是SQL查询。

如果要重新排列结果,则必须操作查询集,检查完全匹配,然后使用正则表达式检查部分匹配。

搜索并不是最适合ORM的东西,因此您可以考虑查看特定的搜索应用程序。他们通常会维护一个索引,这可以避免数据库命中,也可能提供一个百分比匹配顺序,就像你正在寻找的那样。

一个好的起点可能是Haystack