tune news search for BO
This commit is contained in:
parent
1c01604f43
commit
d81d2445f5
|
|
@ -51,7 +51,7 @@ class NewsListFilterSet(filters.FilterSet):
|
||||||
if value not in EMPTY_VALUES:
|
if value not in EMPTY_VALUES:
|
||||||
if len(value) < 3:
|
if len(value) < 3:
|
||||||
raise ValidationError({'detail': _('Type at least 3 characters to search please.')})
|
raise ValidationError({'detail': _('Type at least 3 characters to search please.')})
|
||||||
return queryset.es_search(value)
|
return queryset.es_search(value, relevance_order='ordering' not in self.request.query_params)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def in_tags(self, queryset, name, value):
|
def in_tags(self, queryset, name, value):
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
||||||
def by_locale(self, locale):
|
def by_locale(self, locale):
|
||||||
return self.filter(title__icontains=locale)
|
return self.filter(title__icontains=locale)
|
||||||
|
|
||||||
def es_search(self, search_value: str):
|
def es_search(self, search_value: str, relevance_order=True):
|
||||||
from search_indexes.documents import NewsDocument
|
from search_indexes.documents import NewsDocument
|
||||||
from search_indexes.utils import OBJECT_FIELD_PROPERTIES
|
from search_indexes.utils import OBJECT_FIELD_PROPERTIES
|
||||||
search_value = search_value.lower()
|
search_value = search_value.lower()
|
||||||
|
|
@ -186,9 +186,12 @@ class NewsQuerySet(TranslationQuerysetMixin):
|
||||||
_query |= elasticsearch_dsl.Q('wildcard', **{key: {'value': f'*{search_value}*', 'boost': boost + 30}})
|
_query |= elasticsearch_dsl.Q('wildcard', **{key: {'value': f'*{search_value}*', 'boost': boost + 30}})
|
||||||
search = NewsDocument.search().query('bool', should=_query)[0:10000].execute()
|
search = NewsDocument.search().query('bool', should=_query)[0:10000].execute()
|
||||||
ids = [result.meta.id for result in search]
|
ids = [result.meta.id for result in search]
|
||||||
ids_order = enumerate(ids)
|
qs = self.filter(id__in=ids)
|
||||||
preserved = Case(*[When(pk=pk, then=pos) for pos, pk in ids_order])
|
if relevance_order:
|
||||||
return self.filter(id__in=ids).order_by(preserved)
|
ids_order = enumerate(ids)
|
||||||
|
preserved = Case(*[When(pk=pk, then=pos) for pos, pk in ids_order])
|
||||||
|
qs = qs.order_by(preserved)
|
||||||
|
return qs
|
||||||
|
|
||||||
def trigram_search(self, search_value: str):
|
def trigram_search(self, search_value: str):
|
||||||
"""Search with mistakes by description or title or subtitle."""
|
"""Search with mistakes by description or title or subtitle."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user