BO new via ES #3

This commit is contained in:
Kuroshini 2020-01-22 19:06:09 +03:00
parent 1907494f15
commit 65a6ac0dd0

View File

@ -165,19 +165,26 @@ class NewsQuerySet(TranslationQuerysetMixin):
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()
search_fields = ('description', 'title', 'subtitle') search_fields = ('description', 'title', 'subtitle')
search_keys = [] field_to_boost = {
'title': 3.0,
'subtitle': 2.0,
'description': 1.0,
}
search_keys = {}
for field in search_fields: for field in search_fields:
for locale in OBJECT_FIELD_PROPERTIES.keys(): for locale in OBJECT_FIELD_PROPERTIES.keys():
search_keys.append(f'{field}.{locale}') search_keys.update({f'{field}.{locale}': field_to_boost[field]})
_query = None _query = None
for key in search_keys: for key, boost in search_keys.items():
if _query is None: if _query is None:
_query = elasticsearch_dsl.Q('fuzzy', **{key: {'value': f'{search_value}', 'fuzziness': 'auto:2,5', _query = elasticsearch_dsl.Q('match', **{key: {'query': search_value, 'fuzziness': 'auto:2,5',
'prefix_length': 0, 'max_expansions': 100}}) 'boost': boost}})
else: else:
_query |= elasticsearch_dsl.Q('fuzzy', **{key: {'value': f'{search_value}', 'fuzziness': 'auto:2,5', _query |= elasticsearch_dsl.Q('match', **{key: {'query': search_value, 'fuzziness': 'auto:2,5',
'prefix_length': 0, 'max_expansions': 100}}) 'boost': boost,
search = NewsDocument.search().filter(_query)[0:10000].execute() }})
_query |= elasticsearch_dsl.Q('wildcard', **{key: {'value': f'*{search_value}*', 'boost': boost + 30}})
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]
return self.filter(id__in=ids) return self.filter(id__in=ids)