I've been a while trying to implement full-text search under PostgreSQL, I created some code that works, but is not optimal. I asked Malcolm Tredinnick and he told me:
"In fact, thinking about this a bit more, it might even be possible to do it all via a custom Q-like object. You might not need to do any QuerySet/Query modifications. You can create a class that is passed to filter() and exclude() calls, similar to how Q() is done now. That class really only has to support an add_to_query() method -- see the Query.add_q() method to see how it's called. When add_to_query() is called on your object, you have full access to the underlying Query instance, so you can add table joins, add things to the where clause, do whatever you want." But I can't do it, so ask for your help. The code I have now is: from django.db.models.sql.query import Query from django.db import connection class nQuery( Query ): def get_from_clause(self): r = super( nQuery, self).get_from_clause() r[0].append(r", plainto_tsquery(%s) as query" ) r[1].append(r"'%s'" % (palabras,) ) return r def full_text( self ): select={ 'headline': "ts_headline( %s, query,'StartSel = <strong>, StopSel = </strong>')" % ( 'content', ), 'rank': "ts_rank_cd(tsv, query, 32)", } self.add_extra( select,None,('tsv @@ query',),None,None,None ) q = nQuery( MyModel, connection ) q.full_text() from django.db.models.query import QuerySet items = QuerySet( MyModel, q ).order_by('-rank') So what I want now is to create the custom Q-like object and get rid of the previous code. This Q object should have an add_to_query() method, where I have access to the Query instance and I can modify everything. Here is where the problem comes. I cant get an sql clause like this: SELECT *, ts_headline( content_field, query,'StartSel = <strong>, StopSel = </strong>')" ) as headline, ts_rank_cd(tsv, query, 32) as rank FROM table_name,plainto_tsquery('words I want to search') as query WHERE tsv@@ query. Once this custom Q object is created, then we can use it like this: FT( words='words I want to search' ) optionally we can pass parameters to retrieve the headline or not. I'm completly stuck with this. I hope someone here can help me. Thank you. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---