代码之家  ›  专栏  ›  技术社区  ›  pleasedontbelong

postgresql全文搜索查询到django ORM

  •  3
  • pleasedontbelong  · 技术社区  · 14 年前

    我在跟踪 documentation 现在,要进行搜索,我必须执行这样的查询

    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;
    

    我想应该使用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=[???])
    

    谢谢你的帮助:)

    1 回复  |  直到 5 年前
        1
  •  4
  •   Steve Jalim    14 年前

    警告:我是在摇摇晃晃的火车上写的,头很冷,但是这个

    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'])
    

    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;""")