#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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