def get_solr_results(search_form, page_size, max_pages, start_page=1, valid_ids=None, solr=None, offset=None): if not solr: solr = Solr(settings.SOLR_URL) query_filter = search_form.cleaned_data['filter'] if valid_ids: # Update solr filter to only return results in valid ids ids_filter = 'id:(' + ' OR '.join([str(item) for item in valid_ids]) + ')' if query_filter: query_filter += ' %s' % ids_filter else: query_filter = ids_filter solr_ids = [] solr_count = None try: current_page = start_page n_page_requests = 1 # Iterate over solr result pages while (len(solr_ids) < solr_count or solr_count == None) and n_page_requests <= max_pages: query = search_prepare_query(unquote( search_form.cleaned_data['query'] or ""), unquote(query_filter or ""), search_form.cleaned_data['sort'], current_page, page_size, grouping=False, include_facets=False, offset=offset) result = SolrResponseInterpreter(solr.select(unicode(query))) solr_ids += [element['id'] for element in result.docs] solr_count = result.num_found #print 'Solr page %i (total %i sounds)' % (current_page, solr_count) current_page += 1 n_page_requests += 1 except SolrException, e: raise ServerErrorException(msg='Search server error: %s' % e.message)
def get_solr_results(search_form, page_size, max_pages, start_page=1, valid_ids=None, solr=None, offset=None): if not solr: solr = Solr(settings.SOLR_URL) query_filter = search_form.cleaned_data["filter"] if valid_ids: # Update solr filter to only return results in valid ids ids_filter = "id:(" + " OR ".join([str(item) for item in valid_ids]) + ")" if query_filter: query_filter += " %s" % ids_filter else: query_filter = ids_filter solr_ids = [] solr_count = None try: current_page = start_page n_page_requests = 1 # Iterate over solr result pages while (len(solr_ids) < solr_count or solr_count == None) and n_page_requests <= max_pages: query = search_prepare_query( unquote(search_form.cleaned_data["query"] or ""), unquote(query_filter or ""), search_form.cleaned_data["sort"], current_page, page_size, grouping=False, include_facets=False, offset=offset, ) result = SolrResponseInterpreter(solr.select(unicode(query))) solr_ids += [element["id"] for element in result.docs] solr_count = result.num_found # print 'Solr page %i (total %i sounds)' % (current_page, solr_count) current_page += 1 n_page_requests += 1 except SolrException, e: raise ServerErrorException(msg="Search server error: %s" % e.message)
elif not search_form.cleaned_data[ 'descriptors_filter'] and not search_form.cleaned_data[ 'target'] and not target_file: # Standard text-based search try: solr = Solr(settings.SOLR_URL) query = search_prepare_query( unquote(search_form.cleaned_data['query'] or ""), unquote(search_form.cleaned_data['filter'] or ""), search_form.cleaned_data['sort'], search_form.cleaned_data['page'], search_form.cleaned_data['page_size'], grouping=search_form.cleaned_data['group_by_pack'], include_facets=False) result = SolrResponseInterpreter(solr.select(unicode(query))) solr_ids = [element['id'] for element in result.docs] solr_count = result.num_found more_from_pack_data = None if search_form.cleaned_data['group_by_pack']: # If grouping option is on, store grouping info in a dictionary that we can add when serializing sounds more_from_pack_data = dict([(int(element['id']), [ element['more_from_pack'], element['pack_id'], element['pack_name'] ]) for element in result.docs]) return solr_ids, solr_count, None, more_from_pack_data, None, None, None except SolrException, e: if search_form.cleaned_data['filter'] != None:
raise ServerErrorException(msg='The similarity server could not be reached or some unexpected error occurred.') elif not search_form.cleaned_data['descriptors_filter'] and not search_form.cleaned_data['target'] and not target_file: # Standard text-based search try: solr = Solr(settings.SOLR_URL) query = search_prepare_query(unquote(search_form.cleaned_data['query'] or ""), unquote(search_form.cleaned_data['filter'] or ""), search_form.cleaned_data['sort'], search_form.cleaned_data['page'], search_form.cleaned_data['page_size'], grouping=search_form.cleaned_data['group_by_pack'], include_facets=False) result = SolrResponseInterpreter(solr.select(unicode(query))) solr_ids = [element['id'] for element in result.docs] solr_count = result.num_found more_from_pack_data = None if search_form.cleaned_data['group_by_pack']: # If grouping option is on, store grouping info in a dictionary that we can add when serializing sounds more_from_pack_data = dict([(int(element['id']), [element['more_from_pack'], element['pack_id'], element['pack_name']]) for element in result.docs]) return solr_ids, solr_count, None, more_from_pack_data, None, None, None except SolrException, e: if search_form.cleaned_data['filter'] != None: raise BadRequestException(msg='Search server error: %s (please check that your filter syntax and field names are correct)' % e.message) raise BadRequestException(msg='Search server error: %s' % e.message) except Exception, e: