到django ORM的postgresql全文搜索查询

到django ORM的postgresql全文搜索查询,django,postgresql,orm,full-text-search,Django,Postgresql,Orm,Full Text Search,我在跟踪postgresql中的FullTextSearch。我创建了一个tsvector列,并添加了所需的信息,最后创建了一个索引。 现在,要进行搜索,我必须执行这样的查询 SELECT *, ts_rank_cd(textsearchable_index_col, query) AS rank FROM client, plainto_tsquery('famille age') query WHERE textsearchable_index_col @@ query ORDER BY r

我在跟踪postgresql中的FullTextSearch。我创建了一个tsvector列,并添加了所需的信息,最后创建了一个索引。 现在,要进行搜索,我必须执行这样的查询

SELECT *, ts_rank_cd(textsearchable_index_col, query) AS rank
FROM client, plainto_tsquery('famille age') query
WHERE textsearchable_index_col @@ query
ORDER BY rank DESC LIMIT 10;
我希望能够使用Django的ORM执行此操作,以便获得对象。(这里有一个小问题:我需要将tsvector列添加到我的模型中吗?) 我想我应该使用extra()来更改queryset中的“where”和“tables”

如果我将查询更改为此,可能会更容易:

SELECT * FROM client
WHERE plainto_tsquery('famille age') @@ textsearchable_index_col
ORDER BY ts_rank_cd(textsearchable_index_col, plainto_tsquery(text_search)) DESC LIMIT 10
所以我必须做一些事情,比如:

Client.objects.???.extra(where=[???])
感谢您的帮助:)
另一件事,我使用的是Django 1.1

警告:我写这篇文章是在一列摇摇晃晃的火车上,有点感冒,但这应该可以做到:

where_statement = """plainto_tsquery('%s') @@ textsearchable_index_col 
                     ORDER BY ts_rank_cd(textsearchable_index_col, 
                                         plainto_tsquery(%s)) 
                     DESC LIMIT 10"""

qs = Client.objects.extra(where=[where_statement], 
                          params=['famille age', 'famille age'])
如果您使用的是Django 1.2,您可以拨打:

Client.objects.raw("""
SELECT *, ts_rank_cd(textsearchable_index_col, query) AS rank
FROM client, plainto_tsquery('famille age') query
WHERE textsearchable_index_col @@ query
ORDER BY rank DESC LIMIT 10;""")

我已经尝试过了,但是它抛出了一个错误,说查询的语法有问题,这很奇怪,因为我使用了qs.query并直接在数据库中执行,它工作正常,我想问题出在“plainto_tsquery('%s')”中的单引号中