Django使用Search Vector搜索多个单词或部分单词

axzmvihb  于 2023-01-18  发布在  Go
关注(0)|答案(1)|浏览(128)

对于搜索,我想使用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'我得到没有结果

我有点理解它为什么会失败,但我不知道如何实现修复。

qnakjoqk

qnakjoqk1#

如果我理解正确的话,你想有一个部分搜索嗯,对于这个,它是足够的,你从 * 粘贴到查询的结尾,并发送它,你会找到结果。

.
.    
search_query = SearchQuery(text + '*')
.
.

当然,如果你想包含用户的查询,你可以把查询放在下面的两个 * 之间并发送它。

.
.
search_query = SearchQuery('*' + text + '*')
.
.

要了解其工作原理,请阅读以下答案https://stackoverflow.com/a/44382089/16829292

相关问题