Skip to content

Commit 0711220

Browse files
committed
[Fixes #13807] Missing entries in searching with the new indexing
1 parent f12421f commit 0711220

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

geonode/indexing/api/filters.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from rest_framework.filters import BaseFilterBackend
1010

1111
from geonode.indexing.models import ResourceIndex
12-
from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language
12+
from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language, get_default_language
1313

1414

1515
logger = logging.getLogger(__name__)
@@ -45,18 +45,28 @@ def validate_lang(search_lang):
4545
if search_index not in settings.METADATA_INDEXES:
4646
raise serializers.ValidationError(f"Unknown index '{search_index}'")
4747

48-
search_lang = request.query_params.get("search_lang", None)
49-
if search_lang:
50-
search_lang = validate_lang(search_lang)
51-
if not search_lang:
52-
search_lang = get_language_from_request(request)[:2]
53-
search_lang = validate_lang(search_lang)
54-
55-
lang_filter = Q(lang__isnull=True)
56-
if search_lang:
57-
lang_filter = lang_filter | Q(lang=search_lang)
58-
59-
pg_lang = get_pg_language(search_lang)
48+
if any(field in settings.METADATA_INDEXES[search_index] for field in settings.MULTILANG_FIELDS):
49+
# We have at least one field in the index that is multilang
50+
51+
# first option: get a language as query param
52+
search_lang = request.query_params.get("search_lang", None)
53+
if search_lang:
54+
search_lang = validate_lang(search_lang)
55+
if not search_lang:
56+
# 2nd option: check standard config: http headers, cookies
57+
search_lang = get_language_from_request(request)[:2]
58+
search_lang = validate_lang(search_lang)
59+
if not search_lang:
60+
# fallback: just take the default lang
61+
logger.info("search language not found, forcing default")
62+
search_lang = get_default_language()
63+
64+
pg_lang = get_pg_language(search_lang)
65+
lang_filter = Q(lang=search_lang)
66+
67+
else: # the index has no multilang entry
68+
pg_lang = get_pg_language(get_default_language())
69+
lang_filter = Q(lang__isnull=True)
6070

6171
queryset = queryset.filter(
6272
pk__in=Subquery(

0 commit comments

Comments
 (0)