Try*_*yph 9 django postgresql full-text-search
我需要使用postgresql全文搜索功能和带django.contrib.postgres模块的Django执行排名查询.
根据该文档,SearchRank通过执行以下操作,使用该类很容易做到这一点:
>>> from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
>>> vector = SearchVector('body_text')
>>> query = SearchQuery('cheese')
>>> Entry.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')
Run Code Online (Sandbox Code Playgroud)
这可能效果很好,但这并不是我想要的,因为我的表中有一个字段已经包含了我想要使用的tsvectorized数据(而不是在每个搜索查询中重新计算tsvector).
不幸的是,我无法弄清楚如何将这个tsvector字段提供给SearchRank类而不是SearchVector原始数据字段上的对象.
有人能指出如何处理这个问题吗?
编辑:当然,只是尝试SearchVector从tsvector字段实例化一个不起作用并失败并出现此错误(大约是因为我从法语翻译它):
Djang:函数to_tsvector(tsvector)不存在
Nad*_*Nad 13
如果你的模型有SearchVectorField这样的:
from django.contrib.postgres.search import SearchVectorField
class Entry(models.Model):
...
search_vector = SearchVectorField()
Run Code Online (Sandbox Code Playgroud)
你会用F expression:
from django.db.models import F
...
Entry.objects.annotate(rank=SearchRank(F('search_vector'), query)).order_by('-rank')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |