From b8afaaee24a7d8a9b7ed119059e430a54e998fce Mon Sep 17 00:00:00 2001 From: vrigal <rigal@teklia.com> Date: Thu, 12 Dec 2019 09:20:32 +0100 Subject: [PATCH] Use terms field to find elements by reference --- arkindex/documents/api/search.py | 18 +++++++----------- arkindex/documents/serializers/search.py | 1 - 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/arkindex/documents/api/search.py b/arkindex/documents/api/search.py index 202f752830..436536e2a9 100644 --- a/arkindex/documents/api/search.py +++ b/arkindex/documents/api/search.py @@ -31,7 +31,6 @@ class ElementSearch(SearchAPIView): query=None, element_type=None, transcription_type=None, - reference=None, date_lt=None, date_gte=None, min_score=0.0): @@ -53,22 +52,16 @@ class ElementSearch(SearchAPIView): search = search.filter('range', date_range=date_range) - if reference: - search = search.filter( - 'wildcard', - references='*{}*'.format(reference.lower()) - ) - if element_type: search = search.filter('match', type=element_type) nested_query = Q('range', transcriptions__score={'gte': min_score}) - if query: - nested_query &= Q('simple_query_string', query=query, fields=['transcriptions.text']) if transcription_type: nested_query &= Q('match', transcriptions__type=transcription_type.value) + if query: + nested_query &= Q('simple_query_string', query=query, fields=['transcriptions.text']) - search = search.query(Nested( + elastic_query = Nested( path='transcriptions', inner_hits={'size': settings.ES_INNER_RESULTS_LIMIT}, score_mode='sum', @@ -76,8 +69,11 @@ class ElementSearch(SearchAPIView): query=nested_query, functions=[FieldValueFactor(field='transcriptions.score')], ), - )) + ) + if query: + elastic_query |= Q('wildcard', references='*{}*'.format(query.lower())) + search = search.query(elastic_query) return search def post_process(self, *args, **kwargs): diff --git a/arkindex/documents/serializers/search.py b/arkindex/documents/serializers/search.py index 08f9def6ce..e49aa1768f 100644 --- a/arkindex/documents/serializers/search.py +++ b/arkindex/documents/serializers/search.py @@ -20,7 +20,6 @@ class SearchQuerySerializer(serializers.Serializer): score = serializers.FloatField(source='min_score', min_value=0.0, max_value=1.0, default=0.0) date_gte = serializers.CharField(default=None) date_lte = serializers.CharField(source='date_lt', default=None) - reference = serializers.CharField(default=None) element_type = serializers.SlugField(default=None) transcription_type = EnumField(enum=TranscriptionType, default=None) corpus = serializers.UUIDField(source='corpus_id', default=None) -- GitLab