def index_all_profiles(): # Get an es object, delete index and re-create it es = get_es(timeout=settings.ES_INDEXING_TIMEOUT) mappings = {'mappings': {UserProfileMappingType.get_mapping_type_name(): UserProfileMappingType.get_mapping()}} def _recreate_index(index): es.indices.delete(index=index, ignore=[400, 404]) es.indices.create(index, body=mappings) _recreate_index(settings.ES_INDEXES['default']) _recreate_index(settings.ES_INDEXES['public']) # mozillians index ids = UserProfile.objects.complete().values_list('id', flat=True) ts = [index_objects.subtask(kwargs={'mapping_type': UserProfileMappingType, 'ids': ids, 'chunk_size': 150, 'public_index': False})] # public index ids = (UserProfile.objects.complete().public_indexable() .privacy_level(PUBLIC).values_list('id', flat=True)) ts += [index_objects.subtask(kwargs={'mapping_type': UserProfileMappingType, 'ids': ids, 'chunk_size': 150, 'public_index': True})] TaskSet(ts).apply_async()
def index_all_profiles(): # Get an es object, delete index and re-create it es = get_es(timeout=settings.ES_INDEXING_TIMEOUT) mappings = { 'mappings': { UserProfileMappingType.get_mapping_type_name(): UserProfileMappingType.get_mapping() } } def _recreate_index(index): es.indices.delete(index=index, ignore=[400, 404]) es.indices.create(index, body=mappings) _recreate_index(settings.ES_INDEXES['default']) _recreate_index(settings.ES_INDEXES['public']) # mozillians index ids = UserProfile.objects.complete().values_list('id', flat=True) ts = [ index_objects.subtask(args=[UserProfileMappingType, chunk, 150, False]) for chunk in chunked(sorted(list(ids)), 150) ] # public index ts += [ index_objects.subtask(args=[UserProfileMappingType, chunk, 150, True]) for chunk in chunked(sorted(list(ids)), 150) ] TaskSet(ts).apply_async()
def index_all_profiles(): # Get an es object, delete index and re-create it es = get_es(timeout=settings.ES_INDEXING_TIMEOUT) mappings = {'mappings': {UserProfileMappingType.get_mapping_type_name(): UserProfileMappingType.get_mapping()}} def _recreate_index(index): es.indices.delete(index=index, ignore=[400, 404]) es.indices.create(index, body=mappings) _recreate_index(settings.ES_INDEXES['default']) _recreate_index(settings.ES_INDEXES['public']) # mozillians index ids = UserProfile.objects.complete().values_list('id', flat=True) ts = [index_objects.subtask(args=[UserProfileMappingType, chunk, 150, False]) for chunk in chunked(sorted(list(ids)), 150)] # public index ts += [index_objects.subtask(args=[UserProfileMappingType, chunk, 150, True]) for chunk in chunked(sorted(list(ids)), 150)] TaskSet(ts).apply_async()
def betasearch(request): """This view is for researching new search and data filtering options. It will eventually replace the 'search' view. Filtering using SearchFilter does not respect privacy levels because it directly hits the db. This should be further investigated before the feature is released to the public. Meanwhile we limit searches only to vouched users. This view is behind the 'betasearch' waffle flag. """ limit = None people = [] show_pagination = False form = forms.SearchForm(request.GET) filtr = forms.SearchFilter(request.GET) if form.is_valid(): query = form.cleaned_data.get('q', u'') limit = form.cleaned_data['limit'] page = request.GET.get('page', 1) public = not (request.user.is_authenticated() and request.user.userprofile.is_vouched) profiles_matching_filter = list(filtr.qs.values_list('id', flat=True)) profiles = UserProfileMappingType.search(query, include_non_vouched=True, public=public) profiles = profiles.filter(id__in=profiles_matching_filter) paginator = Paginator(profiles, limit) try: people = paginator.page(page) except PageNotAnInteger: people = paginator.page(1) except EmptyPage: people = paginator.page(paginator.num_pages) show_pagination = paginator.count > settings.ITEMS_PER_PAGE data = dict(people=people, search_form=form, filtr=filtr, limit=limit, show_pagination=show_pagination) return render(request, 'phonebook/betasearch.html', data)
def search(request): limit = None people = [] show_pagination = False form = forms.SearchForm(request.GET) groups = None functional_areas = None if form.is_valid(): query = form.cleaned_data.get('q', u'') limit = form.cleaned_data['limit'] include_non_vouched = form.cleaned_data['include_non_vouched'] page = request.GET.get('page', 1) functional_areas = Group.get_functional_areas() public = not (request.user.is_authenticated() and request.user.userprofile.is_vouched) profiles = UserProfileMappingType.search( query, public=public, include_non_vouched=include_non_vouched) if not public: groups = Group.search(query) paginator = Paginator(profiles, limit) try: people = paginator.page(page) except PageNotAnInteger: people = paginator.page(1) except EmptyPage: people = paginator.page(paginator.num_pages) if profiles.count() == 1 and not groups: return redirect('phonebook:profile_view', people[0].user.username) show_pagination = paginator.count > settings.ITEMS_PER_PAGE d = dict(people=people, search_form=form, limit=limit, show_pagination=show_pagination, groups=groups, functional_areas=functional_areas) return render(request, 'phonebook/search.html', d)