From cf15bab11018fc3ecaea78bf4da5263cebafe251 Mon Sep 17 00:00:00 2001 From: Nayor Date: Thu, 2 Jul 2026 00:00:34 +0200 Subject: [PATCH] Fix search language fallback and improve log --- c2corg_api/search/__init__.py | 24 +++++++++--------------- c2corg_api/search/search.py | 6 ++++++ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/c2corg_api/search/__init__.py b/c2corg_api/search/__init__.py index 9d6c2a833..df2ce53b5 100644 --- a/c2corg_api/search/__init__.py +++ b/c2corg_api/search/__init__.py @@ -9,7 +9,6 @@ from c2corg_api.models.user_profile import USERPROFILE_TYPE from c2corg_api.models.waypoint import WAYPOINT_TYPE from c2corg_api.models.xreport import XREPORT_TYPE -from c2corg_api.models.coverage import COVERAGE_TYPE from c2corg_api.search.mappings.area_mapping import SearchArea from c2corg_api.search.mappings.article_mapping import SearchArticle from c2corg_api.search.mappings.book_mapping import SearchBook @@ -20,7 +19,6 @@ from c2corg_api.search.mappings.user_mapping import SearchUser from c2corg_api.search.mappings.waypoint_mapping import SearchWaypoint from c2corg_api.search.mappings.xreport_mapping import SearchXreport -from c2corg_api.search.mappings.coverage_mapping import SearchCoverage from elasticsearch import Elasticsearch from elasticsearch_dsl import Search from elasticsearch_dsl.connections import connections @@ -51,6 +49,7 @@ def client_from_config(settings): def configure_es_from_config(settings): + global elasticsearch_config client = client_from_config(settings) connections.add_connection('default', client) elasticsearch_config['client'] = client @@ -90,19 +89,15 @@ def get_text_query_on_title(search_term, search_lang=None): else: mots = True - if not search_lang: + # fall back to searching every language when none is given, using + # explicit field names rather than a `title_*` wildcard so the query + # does not depend on ES resolving the field pattern correctly. + langs = [search_lang] if search_lang else default_langs + for lang in langs: if not mots: - fields.append('title_*.ngram') + fields.append('title_{0}.ngram'.format(lang)) else: - fields.append('title_*.contentheavy') - - else: - for lang in default_langs: - if lang == search_lang: - if not mots: - fields.append('title_{0}.ngram'.format(lang)) - else: - fields.append('title_{0}.contentheavy'.format(lang)) + fields.append('title_{0}.contentheavy'.format(lang)) if not mots: return MultiMatch( @@ -136,6 +131,5 @@ def get_text_query_on_title(search_term, search_lang=None): ROUTE_TYPE: SearchRoute, MAP_TYPE: SearchTopoMap, USERPROFILE_TYPE: SearchUser, - WAYPOINT_TYPE: SearchWaypoint, - COVERAGE_TYPE: SearchCoverage, + WAYPOINT_TYPE: SearchWaypoint } diff --git a/c2corg_api/search/search.py b/c2corg_api/search/search.py index 7929caf1f..dbdf987f0 100644 --- a/c2corg_api/search/search.py +++ b/c2corg_api/search/search.py @@ -1,8 +1,12 @@ +import logging + from c2corg_api.search import create_search, elasticsearch_config, \ get_text_query_on_title from c2corg_api.views.document_listings import get_documents from elasticsearch_dsl.search import MultiSearch +log = logging.getLogger(__name__) + def search_for_types(search_types, search_term, limit, lang): """Get results for all given types. @@ -48,6 +52,8 @@ def do_multi_search_for_types(search_types, search_term, limit, lang): query(get_text_query_on_title(search_term, lang)).\ fields([]).\ extra(from_=0, size=limit) + log.debug('Search filter for type {}: {}'.format( + get_documents_config.document_type, search.to_dict())) multi_search = multi_search.add(search) responses = multi_search.execute()