#28194: Add search rank cd function and normalization for Postgres full text 
search
---------------------------------------------+------------------------
               Reporter:  Andrii Soldatenko  |          Owner:  nobody
                   Type:  Uncategorized      |         Status:  new
              Component:  Uncategorized      |        Version:  1.11
               Severity:  Normal             |       Keywords:
           Triage Stage:  Unreviewed         |      Has patch:  0
    Needs documentation:  0                  |    Needs tests:  0
Patch needs improvement:  0                  |  Easy pickings:  0
                  UI/UX:  0                  |
---------------------------------------------+------------------------
 It would be great to have cover density ranking for the given document
 vector and query function `ts_rank_cd`. It helps to order search results
 with different normalization strategies.

 Also add `normalization` parameter option that specifies whether and how a
 document's length should impact its rank.

 >0 (the default) ignores the document length
 >1 divides the rank by 1 + the logarithm of the document length
 >2 divides the rank by the document length
 >4 divides the rank by the mean harmonic distance between extents (this is
 implemented only by ts_rank_cd)
 >8 divides the rank by the number of unique words in document
 >16 divides the rank by 1 + the logarithm of the number of unique words in
 document
 >32 divides the rank by itself + 1


 Now you can do something like this:

 {{{
 class SearchRankCD(SearchRank):
     function = 'ts_rank_cd'

     def __init__(self, vector, query, normalization=0, **extra):
         super(SearchRank, self).__init__(
             vector, query, normalization, **extra)

 query = SearchQuery('messenger')

 Application.objects.annotate(
     rank=SearchRankCD(
         F('search_vector_title'), query,
         normalization=2)  # 2 divides the rank by the document length
 ).filter(search_vector_title=query).order_by('-rank')
 }}}

--
Ticket URL: <https://code.djangoproject.com/ticket/28194>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/059.67311c5a813d5077386725ebcf281f61%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to