Opened 16 months ago

Last modified 15 months ago

#28194 assigned New feature

Add search rank cd function and normalization for Postgres full text search

Reported by: Andrii Soldatenko Owned by: Andrii Soldatenko
Component: contrib.postgres Version: 1.11
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

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

Change History (3)

comment:1 Changed 16 months ago by Andrii Soldatenko

Component: Uncategorizedcontrib.postgres
Type: UncategorizedNew feature

comment:2 Changed 15 months ago by Tim Graham

Triage Stage: UnreviewedAccepted

comment:3 Changed 15 months ago by Andrii Soldatenko

Owner: changed from nobody to Andrii Soldatenko
Status: newassigned
Note: See TracTickets for help on using tickets.
Back to Top