diff --git a/links/search_views.py b/links/search_views.py index 6205658..70a7569 100644 --- a/links/search_views.py +++ b/links/search_views.py @@ -3,7 +3,7 @@ from itertools import chain from django.http import JsonResponse from django.views.generic import ListView from django.views.generic.base import TemplateView -from django.db.models import Q, Value, CharField +from django.db.models import Q, Value, CharField, IntegerField, Case, When from django.db import models from django.utils.text import slugify from .models import Link, Page, Post @@ -244,7 +244,16 @@ def search_api_v2(request): def search_aliases(request): query = request.GET.get('q', '').strip() - links = Link.objects.filter(alias__icontains=query)[:10] + + # Prioritize results: exact match first, then starts with, then contains + links = Link.objects.filter(alias__icontains=query).annotate( + priority=Case( + When(alias__iexact=query, then=Value(1)), + When(alias__istartswith=query, then=Value(2)), + default=Value(3), + output_field=IntegerField() + ) + ).order_by('priority', 'alias')[:10] results = [] for link in links: