对于搜索,我想使用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').
有2个“问题”。例如,对于名称“Eric”,如果我搜索:
- “eric”我得到了正确的结果
- '埃里克约翰'我得到没有结果
- 'eri'我得到没有结果
我有点理解它为什么会失败,但我不知道如何实现修复。
1条答案
按热度按时间qnakjoqk1#
如果我理解正确的话,你想有一个部分搜索嗯,对于这个,它是足够的,你从 * 粘贴到查询的结尾,并发送它,你会找到结果。
当然,如果你想包含用户的查询,你可以把查询放在下面的两个 * 之间并发送它。
要了解其工作原理,请阅读以下答案https://stackoverflow.com/a/44382089/16829292