def _get_map_results(query): q = extension.map_query(query) q = _filter_security(q, query.user, Map, 'view_map') if query.owner: q = q.filter(owner__username=query.owner) if query.extent: q = filter_by_extent(Map, q, query.extent) if query.added: q = q.filter(last_modified__gte=query.added) if query.period: q = filter_by_period(Map, q, *query.period) if query.kw: # this is a somewhat nested query but it performs way faster than # other approaches layers_with_kw = Layer.objects.filter(_build_kw_only_query(query.kw)).values('typename') map_layers_with = MapLayer.objects.filter(name__in=layers_with_kw).values('map') q = q.filter(id__in=map_layers_with) if query.query: q = _build_map_layer_text_query(q, query, query_keywords=True) rules = _rank_rules(Map, ['title',10, 5], ['abstract',5, 2], ) q = _safely_add_relevance(q, query, rules) return q.distinct()
def _get_map_results(query): q = extension.map_query(query) q = _filter_security(q, query.user, Map, 'view_map') if query.owner: q = q.filter(owner__username=query.owner) if query.extent: q = filter_by_extent(Map, q, query.extent) if query.added: q = q.filter(last_modified__gte=query.added) if query.period: q = filter_by_period(Map, q, *query.period) if query.kw: q = q.filter(_build_kw_only_query(query.kw)) if query.exclude: q = q.exclude(reduce(operator.or_, [Q(title__contains=ex) for ex in query.exclude])) if query.categories: q = _filter_category(q, query.categories) if query.query: q = _build_map_layer_text_query(q, query, query_keywords=True) rules = _rank_rules(ResourceBase, ['title',10, 5], ['abstract',5, 2], ) q = _safely_add_relevance(q, query, rules) return q.distinct()