到django ORM的postgresql全文搜索查询
我在跟踪postgresql中的FullTextSearch。我创建了一个tsvector列,并添加了所需的信息,最后创建了一个索引。 现在,要进行搜索,我必须执行这样的查询到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
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')”中的单引号中