diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 491babdd15f8d4c017230f097af4b274c880a000..f5ddec00b1da2f591f1a651e1b9c60427d1f4da1 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -37,6 +37,7 @@ DJANGO_APPS = ( 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.postgres', # Useful template tags: # 'django.contrib.humanize', diff --git a/api/funkwhale_api/common/migrations/0001_initial.py b/api/funkwhale_api/common/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..e95cc11e9a464eaa2a72de047262f78af0888038 --- /dev/null +++ b/api/funkwhale_api/common/migrations/0001_initial.py @@ -0,0 +1,12 @@ +# Generated by Django 2.0.2 on 2018-02-27 18:43 +from django.db import migrations +from django.contrib.postgres.operations import UnaccentExtension + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + UnaccentExtension() + ] diff --git a/api/funkwhale_api/common/migrations/__init__.py b/api/funkwhale_api/common/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index ac76667daa9fc083046379e4daa176e6555da49f..d026c9847ca3db7f9920469a225399b0d6c0d3dc 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -63,7 +63,7 @@ class ArtistViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet): 'albums__tracks__tags')) serializer_class = serializers.ArtistSerializerNested permission_classes = [ConditionalAuthentication] - search_fields = ['name'] + search_fields = ['name__unaccent'] filter_class = filters.ArtistFilter ordering_fields = ('id', 'name', 'creation_date') @@ -76,7 +76,7 @@ class AlbumViewSet(SearchMixin, viewsets.ReadOnlyModelViewSet): 'tracks__files')) serializer_class = serializers.AlbumSerializerNested permission_classes = [ConditionalAuthentication] - search_fields = ['title'] + search_fields = ['title__unaccent'] ordering_fields = ('creation_date',) @@ -133,9 +133,9 @@ class TrackViewSet(TagViewSetMixin, SearchMixin, viewsets.ReadOnlyModelViewSet): search_fields = ['title', 'artist__name'] ordering_fields = ( 'creation_date', - 'title', - 'album__title', - 'artist__name', + 'title__unaccent', + 'album__title__unaccent', + 'artist__name__unaccent', ) def get_queryset(self): @@ -249,7 +249,11 @@ class Search(views.APIView): return Response(results, status=200) def get_tracks(self, query): - search_fields = ['mbid', 'title', 'album__title', 'artist__name'] + search_fields = [ + 'mbid', + 'title__unaccent', + 'album__title__unaccent', + 'artist__name__unaccent'] query_obj = utils.get_query(query, search_fields) return ( models.Track.objects.all() @@ -263,7 +267,10 @@ class Search(views.APIView): def get_albums(self, query): - search_fields = ['mbid', 'title', 'artist__name'] + search_fields = [ + 'mbid', + 'title__unaccent', + 'artist__name__unaccent'] query_obj = utils.get_query(query, search_fields) return ( models.Album.objects.all() @@ -277,7 +284,7 @@ class Search(views.APIView): def get_artists(self, query): - search_fields = ['mbid', 'name'] + search_fields = ['mbid', 'name__unaccent'] query_obj = utils.get_query(query, search_fields) return ( models.Artist.objects.all() @@ -292,7 +299,7 @@ class Search(views.APIView): def get_tags(self, query): - search_fields = ['slug', 'name'] + search_fields = ['slug', 'name__unaccent'] query_obj = utils.get_query(query, search_fields) # We want the shortest tag first diff --git a/changes/changelog.d/81.feature b/changes/changelog.d/81.feature new file mode 100644 index 0000000000000000000000000000000000000000..56c44d3ccad16a257003a471b15cc1aa574a748a --- /dev/null +++ b/changes/changelog.d/81.feature @@ -0,0 +1 @@ +Search now unaccent letters for queries like "The Dø" or "Björk", yielding more results (#81)