Skip to content

Commit 46e930b

Browse files
committed
Allowed low ranking search results to be returned in doc search.
1 parent 418d589 commit 46e930b

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

djangoproject/scss/_style.scss

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,7 +2763,7 @@ form {
27632763
display: block;
27642764
font-weight: 400;
27652765
height: 30px;
2766-
margin: 10px 0px;
2766+
margin: 10px 0px 5px;
27672767
padding: 6px 14% 8px 10px;
27682768
text-indent: 0;
27692769
vertical-align: middle;
@@ -2925,7 +2925,13 @@ form {
29252925
margin: 0 0 10px 0;
29262926

29272927
button {
2928-
top: 19%;
2928+
top: 13%;
2929+
}
2930+
2931+
.helptext {
2932+
font-size: 1.1rem;
2933+
line-height: 1.5rem;
2934+
display: block;
29292935
}
29302936
}
29312937
}

docs/models.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
)
1717
from django.core.cache import cache
1818
from django.db import models, transaction
19-
from django.db.models import Prefetch, Q
19+
from django.db.models import Prefetch, Q, F
2020
from django.db.models.fields.json import KeyTextTransform
2121
from django.utils.functional import cached_property
2222
from django.utils.html import strip_tags
@@ -261,11 +261,9 @@ def search(self, query_text, release):
261261
"release__release", queryset=Release.objects.only("version")
262262
),
263263
)
264-
.filter(
265-
release_id=release.id,
266-
search=search_query,
267-
)
264+
.filter(release_id=release.id)
268265
.annotate(
266+
search_query=Q(search=search_query),
269267
rank=search_rank + similarity,
270268
headline=SearchHeadline(
271269
"title",
@@ -283,11 +281,9 @@ def search(self, query_text, release):
283281
),
284282
breadcrumbs=models.F("metadata__breadcrumbs"),
285283
)
286-
.order_by("-rank")
287-
.only(
288-
"path",
289-
"release",
290-
)
284+
.filter(Q(search_query=True) | Q(rank__gt=0.3))
285+
.order_by("-search_query", "-rank")
286+
.only("path", "release")
291287
)
292288
else:
293289
return self.none()

docs/templates/docs/search_form.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@
88
<i class="icon icon-search"></i>
99
<span class="visuallyhidden">{% trans 'Search' %}</span>
1010
</button>
11+
<span class="helptext quiet">
12+
{% blocktranslate trimmed %}
13+
Uses PostgreSQL <code>websearch_to_tsquery</code> syntax e.g. use "quoted text" for a phrase.
14+
{% endblocktranslate %}
15+
</span>
1116
</form>

docs/tests.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -567,17 +567,21 @@ def test_search(self):
567567
),
568568
),
569569
]
570-
self.assertQuerySetEqual(
571-
Document.objects.search("django", self.release),
572-
expected_list,
573-
transform=attrgetter("rank", "path", "headline", "highlight"),
574-
)
570+
with self.assertNumQueries(2):
571+
self.assertQuerySetEqual(
572+
Document.objects.search("django", self.release),
573+
expected_list,
574+
transform=attrgetter("rank", "path", "headline", "highlight"),
575+
)
575576

576577
def test_websearch(self):
577578
self.assertQuerySetEqual(
578579
Document.objects.search('django "release notes" -packaging', self.release),
579-
[("Django 1.9.4 release notes", 1.5675676)],
580-
transform=attrgetter("title", "rank"),
580+
[
581+
("Django 1.9.4 release notes", 1.5675676, True),
582+
("Django 1.2.1 release notes", 1.6, False),
583+
],
584+
transform=attrgetter("title", "rank", "search_query"),
581585
)
582586

583587
def test_multilingual_search(self):
@@ -642,6 +646,15 @@ def test_search_highlight_stemmed(self):
642646
transform=attrgetter("headline", "highlight"),
643647
)
644648

649+
def test_search_title(self):
650+
misspelled_query = Document.objects.search("viewss", self.release)
651+
with self.assertNumQueries(2):
652+
self.assertQuerySetEqual(
653+
misspelled_query,
654+
["Generic views"],
655+
transform=attrgetter("headline"),
656+
)
657+
645658

646659
class TemplateTestCase(TestCase):
647660
def _assertOGTitleEqual(self, doc, expected):

0 commit comments

Comments
 (0)