def search_prepare_query(search_query, filter_query, sort, current_page, sounds_per_page, id_weight = DEFAULT_SEARCH_WEIGHTS['id'], tag_weight = DEFAULT_SEARCH_WEIGHTS['tag'], description_weight = DEFAULT_SEARCH_WEIGHTS['description'], username_weight = DEFAULT_SEARCH_WEIGHTS['username'], pack_tokenized_weight = DEFAULT_SEARCH_WEIGHTS['pack_tokenized'], original_filename_weight = DEFAULT_SEARCH_WEIGHTS['original_filename'], grouping = False, include_facets = True, grouping_pack_limit = 1): query = SolrQuery() field_weights = [] if id_weight != 0 : field_weights.append(("id", id_weight)) if tag_weight != 0 : field_weights.append(("tag", tag_weight)) if description_weight != 0 : field_weights.append(("description", description_weight)) if username_weight != 0 : field_weights.append(("username", username_weight)) if pack_tokenized_weight != 0 : field_weights.append(("pack_tokenized", pack_tokenized_weight)) if original_filename_weight != 0 : field_weights.append(("original_filename", original_filename_weight)) query.set_dismax_query(search_query, query_fields=field_weights,) query.set_query_options(start=(current_page - 1) * sounds_per_page, rows=sounds_per_page, field_list=["id"], filter_query=filter_query, sort=sort) if include_facets: query.add_facet_fields("samplerate", "grouping_pack", "username", "tag", "bitrate", "bitdepth", "type", "channels", "license") query.set_facet_options_default(limit=5, sort=True, mincount=1, count_missing=False) query.set_facet_options("tag", limit=30) query.set_facet_options("username", limit=30) query.set_facet_options("grouping_pack", limit=10) query.set_facet_options("license", limit=10) if grouping: query.set_group_field(group_field="grouping_pack") query.set_group_options(group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=grouping_pack_limit, # This is the number of documents that will be returned for each group. By default only 1 is returned. group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0) return query
def tags(request, multiple_tags=None): if multiple_tags: multiple_tags = multiple_tags.split('/') else: multiple_tags = [] multiple_tags = sorted(filter(lambda x: x, multiple_tags)) try: current_page = int(request.GET.get("page", 1)) except ValueError: current_page = 1 solr = Solr(settings.SOLR_URL) query = SolrQuery() if multiple_tags: query.set_query(" ".join("tag:\"" + tag + "\"" for tag in multiple_tags)) else: query.set_query("*:*") query.set_query_options(start=(current_page - 1) * settings.SOUNDS_PER_PAGE, rows=settings.SOUNDS_PER_PAGE, field_list=["id"], sort=["num_downloads desc"]) query.add_facet_fields("tag") query.set_facet_options_default(limit=100, sort=True, mincount=1, count_missing=False) query.set_group_field(group_field="grouping_pack") query.set_group_options(group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=1, group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0, group_truncate=True) # Sets how many results from the same grup are taken into account for computing the facets try: results = SolrResponseInterpreter(solr.select(unicode(query))) paginator = SolrResponseInterpreterPaginator(results, settings.SOUNDS_PER_PAGE) num_results = paginator.count non_grouped_number_of_results = results.non_grouped_number_of_matches page = paginator.page(current_page) error = False tags = [dict(name=f[0], count=f[1]) for f in results.facets["tag"]] docs = results.docs resultids = [d.get("id") for d in docs] resultsounds = sounds.models.Sound.objects.bulk_query_id(resultids) allsounds = {} for s in resultsounds: allsounds[s.id] = s for d in docs: d["sound"] = allsounds[d["id"]] except SolrException, e: error = True search_logger.error("SOLR ERROR - %s" % e)
def tags(request, multiple_tags=None): if multiple_tags: multiple_tags = multiple_tags.split('/') else: multiple_tags = [] multiple_tags = sorted(filter(lambda x:x, multiple_tags)) try: current_page = int(request.GET.get("page", 1)) except ValueError: current_page = 1 solr = Solr(settings.SOLR_URL) query = SolrQuery() if multiple_tags: query.set_query(" ".join("tag:\"" + tag + "\"" for tag in multiple_tags)) else: query.set_query("*:*") query.set_query_options(start=(current_page - 1) * settings.SOUNDS_PER_PAGE, rows=settings.SOUNDS_PER_PAGE, field_list=["id"], sort=["num_downloads desc"]) query.add_facet_fields("tag") query.set_facet_options_default(limit=100, sort=True, mincount=1, count_missing=False) try: results = SolrResponseInterpreter(solr.select(unicode(query))) paginator = SolrResponseInterpreterPaginator(results, settings.SOUNDS_PER_PAGE) page = paginator.page(current_page) error = False tags = [dict(name=f[0], count=f[1]) for f in results.facets["tag"]] except SolrException, e: error = True search_logger.error("SOLR ERROR - %s" % e)
def tags(request, multiple_tags=None): if multiple_tags: multiple_tags = multiple_tags.split('/') else: multiple_tags = [] multiple_tags = sorted(filter(lambda x: x, multiple_tags)) try: current_page = int(request.GET.get("page", 1)) except ValueError: current_page = 1 solr = Solr(settings.SOLR_URL) query = SolrQuery() if multiple_tags: query.set_query(" ".join("tag:\"" + tag + "\"" for tag in multiple_tags)) else: query.set_query("*:*") query.set_query_options(start=(current_page - 1) * settings.SOUNDS_PER_PAGE, rows=settings.SOUNDS_PER_PAGE, field_list=["id"], sort=["num_downloads desc"]) query.add_facet_fields("tag") query.set_facet_options_default(limit=100, sort=True, mincount=1, count_missing=False) query.set_group_field(group_field="grouping_pack") query.set_group_options( group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=1, group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0, group_truncate=True ) # Sets how many results from the same grup are taken into account for computing the facets try: results = SolrResponseInterpreter(solr.select(unicode(query))) paginator = SolrResponseInterpreterPaginator(results, settings.SOUNDS_PER_PAGE) num_results = paginator.count non_grouped_number_of_results = results.non_grouped_number_of_matches page = paginator.page(current_page) error = False tags = [dict(name=f[0], count=f[1]) for f in results.facets["tag"]] docs = results.docs resultids = [d.get("id") for d in docs] resultsounds = sounds.models.Sound.objects.bulk_query_id(resultids) allsounds = {} for s in resultsounds: allsounds[s.id] = s for d in docs: d["sound"] = allsounds[d["id"]] except SolrException as e: error = True search_logger.error("SOLR ERROR - %s" % e) except: error = True slash_tag = "/".join(multiple_tags) space_tag = " ".join(multiple_tags) if slash_tag: follow_tags_url = reverse('follow-tags', args=[slash_tag]) unfollow_tags_url = reverse('unfollow-tags', args=[slash_tag]) show_unfollow_button = False if request.user.is_authenticated: show_unfollow_button = follow_utils.is_user_following_tag( request.user, slash_tag) return render(request, 'sounds/tags.html', locals())
def search_prepare_query( search_query, filter_query, sort, current_page, sounds_per_page, id_weight=settings.DEFAULT_SEARCH_WEIGHTS['id'], tag_weight=settings.DEFAULT_SEARCH_WEIGHTS['tag'], description_weight=settings.DEFAULT_SEARCH_WEIGHTS['description'], username_weight=settings.DEFAULT_SEARCH_WEIGHTS['username'], pack_tokenized_weight=settings. DEFAULT_SEARCH_WEIGHTS['pack_tokenized'], original_filename_weight=settings. DEFAULT_SEARCH_WEIGHTS['original_filename'], grouping=False, include_facets=True, grouping_pack_limit=1, offset=None, in_ids=[]): query = SolrQuery() # Set field weights and scoring function field_weights = [] if id_weight != 0: field_weights.append(("id", id_weight)) if tag_weight != 0: field_weights.append(("tag", tag_weight)) if description_weight != 0: field_weights.append(("description", description_weight)) if username_weight != 0: field_weights.append(("username", username_weight)) if pack_tokenized_weight != 0: field_weights.append(("pack_tokenized", pack_tokenized_weight)) if original_filename_weight != 0: field_weights.append(("original_filename", original_filename_weight)) query.set_dismax_query( search_query, query_fields=field_weights, ) # Set start and rows parameters (offset and size) if not offset: start = (current_page - 1) * sounds_per_page else: start = offset # Process filter filter_query = search_process_filter(filter_query) # Process filter for clustering (maybe consider only applying this filter in this case...) if in_ids: filter_query = '' # for now we remove all the other filters if len(in_ids) == 1: filter_query += ' id:{}'.format(in_ids[0]) else: filter_query += ' id:' filter_query += ' OR id:'.join(in_ids) # Set all options query.set_query_options(start=start, rows=sounds_per_page, field_list=["id"], filter_query=filter_query, sort=sort) # Specify query factes if include_facets: query.add_facet_fields("samplerate", "grouping_pack", "username", "tag", "bitrate", "bitdepth", "type", "channels", "license") query.set_facet_options_default(limit=5, sort=True, mincount=1, count_missing=False) query.set_facet_options("type", limit=len( sounds.models.Sound.SOUND_TYPE_CHOICES)) query.set_facet_options("tag", limit=30) query.set_facet_options("username", limit=30) query.set_facet_options("grouping_pack", limit=10) query.set_facet_options("license", limit=10) # Add groups if grouping: query.set_group_field(group_field="grouping_pack") query.set_group_options( group_func=None, group_query=None, group_rows=10, group_start=0, group_limit= grouping_pack_limit, # This is the number of documents that will be returned for each group. By default only 1 is returned. group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0) return query
def search_prepare_query( search_query, filter_query, sort, current_page, sounds_per_page, id_weight=settings.DEFAULT_SEARCH_WEIGHTS['id'], tag_weight=settings.DEFAULT_SEARCH_WEIGHTS['tag'], description_weight=settings.DEFAULT_SEARCH_WEIGHTS['description'], username_weight=settings.DEFAULT_SEARCH_WEIGHTS['username'], pack_tokenized_weight=settings. DEFAULT_SEARCH_WEIGHTS['pack_tokenized'], original_filename_weight=settings. DEFAULT_SEARCH_WEIGHTS['original_filename'], grouping=False, include_facets=True, grouping_pack_limit=1, offset=None): query = SolrQuery() field_weights = [] if id_weight != 0: field_weights.append(("id", id_weight)) if tag_weight != 0: field_weights.append(("tag", tag_weight)) if description_weight != 0: field_weights.append(("description", description_weight)) if username_weight != 0: field_weights.append(("username", username_weight)) if pack_tokenized_weight != 0: field_weights.append(("pack_tokenized", pack_tokenized_weight)) if original_filename_weight != 0: field_weights.append(("original_filename", original_filename_weight)) query.set_dismax_query( search_query, query_fields=field_weights, ) if not offset: start = (current_page - 1) * sounds_per_page else: start = offset query.set_query_options(start=start, rows=sounds_per_page, field_list=["id"], filter_query=filter_query, sort=sort) if include_facets: query.add_facet_fields("samplerate", "grouping_pack", "username", "tag", "bitrate", "bitdepth", "type", "channels", "license") query.set_facet_options_default(limit=5, sort=True, mincount=1, count_missing=False) query.set_facet_options("type", limit=len( sounds.models.Sound.SOUND_TYPE_CHOICES)) query.set_facet_options("tag", limit=30) query.set_facet_options("username", limit=30) query.set_facet_options("grouping_pack", limit=10) query.set_facet_options("license", limit=10) if grouping: query.set_group_field(group_field="grouping_pack") query.set_group_options( group_func=None, group_query=None, group_rows=10, group_start=0, group_limit= grouping_pack_limit, # This is the number of documents that will be returned for each group. By default only 1 is returned. group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0) return query
def tags(request, multiple_tags=None): if multiple_tags: multiple_tags = multiple_tags.split('/') else: multiple_tags = [] multiple_tags = sorted(filter(lambda x: x, multiple_tags)) try: current_page = int(request.GET.get("page", 1)) except ValueError: current_page = 1 solr = Solr(settings.SOLR_URL) query = SolrQuery() if multiple_tags: query.set_query(" ".join("tag:\"" + tag + "\"" for tag in multiple_tags)) else: query.set_query("*:*") query.set_query_options(start=(current_page - 1) * settings.SOUNDS_PER_PAGE, rows=settings.SOUNDS_PER_PAGE, field_list=["id"], sort=["num_downloads desc"]) query.add_facet_fields("tag") query.set_facet_options_default(limit=100, sort=True, mincount=1, count_missing=False) query.set_group_field(group_field="grouping_pack") query.set_group_options(group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=1, group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0, group_truncate=True) # Sets how many results from the same group are taken into account for computing the facets page = None num_results = 0 tags = [] error = False docs = {} non_grouped_number_of_results = 0 paginator = None try: results = SolrResponseInterpreter(solr.select(unicode(query))) paginator = SolrResponseInterpreterPaginator(results, settings.SOUNDS_PER_PAGE) num_results = paginator.count non_grouped_number_of_results = results.non_grouped_number_of_matches page = paginator.page(current_page) tags = [dict(name=f[0], count=f[1]) for f in results.facets["tag"]] docs = results.docs resultids = [d.get("id") for d in docs] resultsounds = sounds.models.Sound.objects.bulk_query_id(resultids) allsounds = {} for s in resultsounds: allsounds[s.id] = s for d in docs: d["sound"] = allsounds[d["id"]] except SolrException as e: error = True search_logger.error("SOLR ERROR - %s" % e) except: error = True slash_tag = "/".join(multiple_tags) follow_tags_url = '' unfollow_tags_url = '' show_unfollow_button = False if slash_tag: follow_tags_url = reverse('follow-tags', args=[slash_tag]) unfollow_tags_url = reverse('unfollow-tags', args=[slash_tag]) show_unfollow_button = False if request.user.is_authenticated: show_unfollow_button = follow_utils.is_user_following_tag(request.user, slash_tag) tvars = {'show_unfollow_button': show_unfollow_button, 'multiple_tags': multiple_tags, 'follow_tags_url': follow_tags_url, 'unfollow_tags_url': unfollow_tags_url, 'error': error, 'tags': tags, 'slash_tag': slash_tag, 'num_results': num_results, 'non_grouped_number_of_results': non_grouped_number_of_results, 'docs': docs, 'paginator': paginator, 'page': page, 'current_page': current_page } return render(request, 'sounds/tags.html', tvars)
continue count = int(count) results_before += count # clean the only few things DisMax doesn't like... :) search = search.strip("+-").replace("--", "").replace("+-", "").replace("-+", "").replace("++", "") if search == "\"" or search == "\"\"": search = "" query = SolrQuery() query.set_dismax_query(search, query_fields=[("id", 4), ("tag",3), ("description",3), ("username",2), ("pack_original",2), ("filename",2), "comment"]) query.set_query_options(start=0, rows=10, field_list=["id"]) query.add_facet_fields("samplerate", "pack_original", "username", "tag", "bitrate", "bitdepth") query.set_facet_options_default(limit=5, sort=True, mincount=1, count_missing=True) query.set_facet_options("tag", limit=30) query.set_facet_options("username", limit=30) response = solr.select(unicode(query)) interpreted = SolrResponseInterpreter(response) num_queries_total += 1 num_queries_this_loop += 1 time_solr += interpreted.q_time results_solr += interpreted.num_found except KeyboardInterrupt: break except UnicodeDecodeError:
def search_prepare_query(search_query, filter_query, sort, current_page, sounds_per_page, id_weight=settings.DEFAULT_SEARCH_WEIGHTS['id'], tag_weight=settings.DEFAULT_SEARCH_WEIGHTS['tag'], description_weight=settings.DEFAULT_SEARCH_WEIGHTS['description'], username_weight=settings.DEFAULT_SEARCH_WEIGHTS['username'], pack_tokenized_weight=settings.DEFAULT_SEARCH_WEIGHTS['pack_tokenized'], original_filename_weight=settings.DEFAULT_SEARCH_WEIGHTS['original_filename'], grouping=False, include_facets=True, grouping_pack_limit=1, offset=None): query = SolrQuery() # Set field weights and scoring function field_weights = [] if id_weight != 0: field_weights.append(("id", id_weight)) if tag_weight != 0: field_weights.append(("tag", tag_weight)) if description_weight != 0: field_weights.append(("description", description_weight)) if username_weight != 0: field_weights.append(("username", username_weight)) if pack_tokenized_weight != 0: field_weights.append(("pack_tokenized", pack_tokenized_weight)) if original_filename_weight != 0: field_weights.append(("original_filename", original_filename_weight)) query.set_dismax_query(search_query, query_fields=field_weights,) # Set start and rows parameters (offset and size) if not offset: start = (current_page - 1) * sounds_per_page else: start = offset # Process filter filter_query = search_process_filter(filter_query) # Set all options query.set_query_options(start=start, rows=sounds_per_page, field_list=["id"], filter_query=filter_query, sort=sort) # Specify query factes if include_facets: query.add_facet_fields("samplerate", "grouping_pack", "username", "tag", "bitrate", "bitdepth", "type", "channels", "license") query.set_facet_options_default(limit=5, sort=True, mincount=1, count_missing=False) query.set_facet_options("type", limit=len(sounds.models.Sound.SOUND_TYPE_CHOICES)) query.set_facet_options("tag", limit=30) query.set_facet_options("username", limit=30) query.set_facet_options("grouping_pack", limit=10) query.set_facet_options("license", limit=10) # Add groups if grouping: query.set_group_field(group_field="grouping_pack") query.set_group_options( group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=grouping_pack_limit, # This is the number of documents that will be returned for each group. By default only 1 is returned. group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0) return query
def tags(request, multiple_tags=None): if multiple_tags: multiple_tags = multiple_tags.split('/') else: multiple_tags = [] multiple_tags = sorted(filter(lambda x: x, multiple_tags)) try: current_page = int(request.GET.get("page", 1)) except ValueError: current_page = 1 query = SolrQuery() if multiple_tags: query.set_query(" ".join("tag:\"" + tag + "\"" for tag in multiple_tags)) else: query.set_query("*:*") query.set_query_options(start=(current_page - 1) * settings.SOUNDS_PER_PAGE, rows=settings.SOUNDS_PER_PAGE, field_list=["id"], sort=["num_downloads desc"]) query.add_facet_fields("tag") query.set_facet_options_default(limit=100, sort=True, mincount=1, count_missing=False) query.set_group_field(group_field="grouping_pack") query.set_group_options( group_func=None, group_query=None, group_rows=10, group_start=0, group_limit=1, group_offset=0, group_sort=None, group_sort_ingroup=None, group_format='grouped', group_main=False, group_num_groups=True, group_cache_percent=0, group_truncate=True ) # Sets how many results from the same group are taken into account for computing the facets page = None tags = [] error = False docs = {} non_grouped_number_of_results = 0 paginator = None try: non_grouped_number_of_results, facets, paginator, page, docs = perform_solr_query( query, current_page) tags = [dict(name=f[0], count=f[1]) for f in facets["tag"]] resultids = [d.get("id") for d in docs] resultsounds = sounds.models.Sound.objects.bulk_query_id(resultids) allsounds = {} for s in resultsounds: allsounds[s.id] = s for d in docs: d["sound"] = allsounds[d["id"]] except SolrException as e: error = True search_logger.warning('Search error: query: %s error %s' % (query, e)) except Exception as e: error = True search_logger.error('Could probably not connect to Solr - %s' % e) slash_tag = "/".join(multiple_tags) follow_tags_url = '' unfollow_tags_url = '' show_unfollow_button = False if slash_tag: follow_tags_url = reverse('follow-tags', args=[slash_tag]) unfollow_tags_url = reverse('unfollow-tags', args=[slash_tag]) show_unfollow_button = False if request.user.is_authenticated: show_unfollow_button = follow_utils.is_user_following_tag( request.user, slash_tag) tvars = { 'show_unfollow_button': show_unfollow_button, 'multiple_tags': multiple_tags, 'follow_tags_url': follow_tags_url, 'unfollow_tags_url': unfollow_tags_url, 'error': error, 'tags': tags, 'slash_tag': slash_tag, 'non_grouped_number_of_results': non_grouped_number_of_results, 'docs': docs, 'paginator': paginator, 'page': page, 'current_page': current_page } return render(request, 'sounds/tags.html', tvars)