use*_*631 6 python django django-queryset
对于搜索,我想使用PostgreSQL的搜索矢量;
我写了一个自定义查询方法:
def search(self, text):
search_vectors = (
SearchVector('name', weight='A', config='english') +
SearchVector('short_description', weight='B', config='english') +
SearchVector('description', weight='C', config='english')
)
search_query = SearchQuery(text)
search_rank = SearchRank(search_vectors, search_query, weights=[0.2, 0.4, 0.6, 1])
return self.annotate(rank=search_rank).filter(rank__gte=0.2).order_by('-rank').
Run Code Online (Sandbox Code Playgroud)
有2个“问题”。例如,如果搜索“ Eric”名称,则:
我有点理解为什么它会失败,但是我不知道如何实施这些修复程序。
小智 1
如果我理解正确的话,您想要进行部分搜索那么,为此,您只需将 * 粘贴到查询末尾并发送它就足够了,您将找到结果。
.
.
search_query = SearchQuery(text + '*')
.
.
Run Code Online (Sandbox Code Playgroud)
当然,如果你想包含用户的查询,你可以将查询放在两个*之间,如下所示,然后发送。
.
.
search_query = SearchQuery('*' + text + '*')
.
.
Run Code Online (Sandbox Code Playgroud)
要了解它是如何工作的,请阅读以下答案 /sf/answers/3106746261/