Opened 9 years ago
Closed 6 years ago
#28194 closed New feature (fixed)
Add search rank cd function and normalization for Postgres full text search
| Reported by: | Andrii Soldatenko | Owned by: | Hannes Ljungberg |
|---|---|---|---|
| Component: | contrib.postgres | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | 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 (6)
comment:1 by , 9 years ago
| Component: | Uncategorized → contrib.postgres |
|---|---|
| Type: | Uncategorized → New feature |
comment:2 by , 8 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:3 by , 8 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:4 by , 6 years ago
| Has patch: | set |
|---|---|
| Owner: | changed from to |
| Patch needs improvement: | set |
comment:5 by , 6 years ago
| Patch needs improvement: | unset |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
| Version: | 1.11 → master |
https://github.com/django/django/pull/12597