Skip to content

Commit 4fbadad

Browse files
authored
Merge pull request #2202 from Nayor/fix-elastic-search-langage-fallback
Fix search language fallback and improve log
2 parents b011193 + cf15bab commit 4fbadad

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

c2corg_api/search/__init__.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from c2corg_api.models.user_profile import USERPROFILE_TYPE
1010
from c2corg_api.models.waypoint import WAYPOINT_TYPE
1111
from c2corg_api.models.xreport import XREPORT_TYPE
12-
from c2corg_api.models.coverage import COVERAGE_TYPE
1312
from c2corg_api.search.mappings.area_mapping import SearchArea
1413
from c2corg_api.search.mappings.article_mapping import SearchArticle
1514
from c2corg_api.search.mappings.book_mapping import SearchBook
@@ -20,7 +19,6 @@
2019
from c2corg_api.search.mappings.user_mapping import SearchUser
2120
from c2corg_api.search.mappings.waypoint_mapping import SearchWaypoint
2221
from c2corg_api.search.mappings.xreport_mapping import SearchXreport
23-
from c2corg_api.search.mappings.coverage_mapping import SearchCoverage
2422
from elasticsearch import Elasticsearch
2523
from elasticsearch_dsl import Search
2624
from elasticsearch_dsl.connections import connections
@@ -51,6 +49,7 @@ def client_from_config(settings):
5149

5250

5351
def configure_es_from_config(settings):
52+
global elasticsearch_config
5453
client = client_from_config(settings)
5554
connections.add_connection('default', client)
5655
elasticsearch_config['client'] = client
@@ -90,19 +89,15 @@ def get_text_query_on_title(search_term, search_lang=None):
9089
else:
9190
mots = True
9291

93-
if not search_lang:
92+
# fall back to searching every language when none is given, using
93+
# explicit field names rather than a `title_*` wildcard so the query
94+
# does not depend on ES resolving the field pattern correctly.
95+
langs = [search_lang] if search_lang else default_langs
96+
for lang in langs:
9497
if not mots:
95-
fields.append('title_*.ngram')
98+
fields.append('title_{0}.ngram'.format(lang))
9699
else:
97-
fields.append('title_*.contentheavy')
98-
99-
else:
100-
for lang in default_langs:
101-
if lang == search_lang:
102-
if not mots:
103-
fields.append('title_{0}.ngram'.format(lang))
104-
else:
105-
fields.append('title_{0}.contentheavy'.format(lang))
100+
fields.append('title_{0}.contentheavy'.format(lang))
106101

107102
if not mots:
108103
return MultiMatch(
@@ -136,6 +131,5 @@ def get_text_query_on_title(search_term, search_lang=None):
136131
ROUTE_TYPE: SearchRoute,
137132
MAP_TYPE: SearchTopoMap,
138133
USERPROFILE_TYPE: SearchUser,
139-
WAYPOINT_TYPE: SearchWaypoint,
140-
COVERAGE_TYPE: SearchCoverage,
134+
WAYPOINT_TYPE: SearchWaypoint
141135
}

c2corg_api/search/search.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
import logging
2+
13
from c2corg_api.search import create_search, elasticsearch_config, \
24
get_text_query_on_title
35
from c2corg_api.views.document_listings import get_documents
46
from elasticsearch_dsl.search import MultiSearch
57

8+
log = logging.getLogger(__name__)
9+
610

711
def search_for_types(search_types, search_term, limit, lang):
812
"""Get results for all given types.
@@ -48,6 +52,8 @@ def do_multi_search_for_types(search_types, search_term, limit, lang):
4852
query(get_text_query_on_title(search_term, lang)).\
4953
fields([]).\
5054
extra(from_=0, size=limit)
55+
log.debug('Search filter for type {}: {}'.format(
56+
get_documents_config.document_type, search.to_dict()))
5157
multi_search = multi_search.add(search)
5258

5359
responses = multi_search.execute()

0 commit comments

Comments
 (0)