Exemple #1
0
def results(request, result_type):
    search_q = ''
    just_q = ''
    search_logic_string = ''
    site_values = site_settings(request)
    search_set = get_search_set(site_values)
    site_lang = site_language(site_values['language'])
    current_url = HttpRequest.build_absolute_uri(request)
    if "results" in current_url:
        alt_url = current_url.replace('results', 'resultm')
    else:
        alt_url = current_url.replace('resultm', 'results')
    request_q = request.GET.copy()
    if result_type == 'multipane':
        request_q['rows'] = '3'
    (solr_response,
     num_found,
     rows,
     page_num,
     docs,
     facets,
     query_dict) = ODWPortal.externalurls.get_docs(request_q, search_set)
    num_found_int = int(num_found)
    alt_collation = ''
    original_num_found = num_found_int
    if 'q' in query_dict:
        original_q = query_dict.__getitem__('q')
    else:
        original_q = ''

    # do we need to try again with the spelling suggestions
    tried_alt_spelling = False
    if not num_found_int:
        # look to see if there are alternate spellings and run again with those
        suggestions = solr_response['spellcheck']['suggestions']
        i = suggestions.index(u'correctlySpelled')
        correctly_spelled = suggestions[i+1]
        if not correctly_spelled:
            tried_alt_spelling = True
            alt_collation = ODWPortal.externalurls.get_pref_collation(suggestions)
            if alt_collation:
                request_q2 = request_q.copy()
                request_q2.__setitem__('q', alt_collation)

                # re-execute search
                (solr_response,
                 num_found,
                 rows,
                 page_num,
                 docs,
                 facets,
                 query_dict_2) = ODWPortal.externalurls.get_docs(request_q2, search_set)
                num_found_int = int(num_found)
                search_logic_string = search_logic(query_dict_2, site_lang)
                search_q, just_q = search_query(query_dict_2)
    else:
        search_logic_string = search_logic(query_dict, site_lang)
        search_q, just_q = search_query(query_dict)
    if site_values['use_external_links'] == '1':
        alt_search_results = alt_search(
            site_values['site_id'],
            request_q,
            'results')
    else:
        alt_search_results = ''

    kml_count = ODWPortal.externalurls.get_kml_count(request.GET, search_set)
    docs = solr_response['response']['docs']
    highlighting = solr_response['highlighting']
    document_panel = get_doc_block(docs, just_q, highlighting, 'resultView', site_lang)
    int_rows = int(rows)
    page_nav_bar = page_navigation(num_found_int, int_rows, page_num, search_q, site_lang)
    facet_panels = facet_panel(facets, search_q, site_lang)
    sort_json = sort_variables(facets)
    facet_q = facet_query(query_dict)
    start = solr_response['response']['start']
    context = {
        "document_panel": document_panel,
        "facets": facets,
        "facetPanels": facet_panels,
        "sortJson": sort_json,
        "numFound": num_found,
        "OriginalNumFound": original_num_found,
        "OriginalQ"
        "start": start,
        "rows": rows,
        "pageNum": page_num,
        "pageNavBar": page_nav_bar,
        'alt_search_results': alt_search_results,
        "searchLogicString": search_logic_string,
        "OriginalQ": original_q,
        "searchQ": search_q,
        "altCollation": alt_collation,
        "facetQ": facet_q,
        "KMLCount": kml_count,
        "triedAltSpelling": tried_alt_spelling,
        'site_values': site_values,
        'site_language': site_lang,
        'resultType': result_type,
        'alt_url': alt_url,
    }
    return render(request, "Portal/results.html", context)
Exemple #2
0
def results(request, result_type):
    search_q = ''
    just_q = ''
    search_logic_string = ''
    site_values = site_settings(request)
    search_set = get_search_set(site_values)
    site_lang = site_language(site_values['language'])
    current_url = HttpRequest.build_absolute_uri(request)
    if "results" in current_url:
        alt_url = current_url.replace('results', 'resultm')
    else:
        alt_url = current_url.replace('resultm', 'results')
    request_q = request.GET.copy()
    if result_type == 'multipane':
        request_q['rows'] = '3'
    (solr_response, num_found, rows, page_num, docs, facets,
     query_dict) = ODWPortal.externalurls.get_docs(request_q, search_set)
    num_found_int = int(num_found)
    alt_collation = ''
    original_num_found = num_found_int
    if 'q' in query_dict:
        original_q = query_dict.__getitem__('q')
    else:
        original_q = ''

    # do we need to try again with the spelling suggestions
    tried_alt_spelling = False
    if not num_found_int:
        # look to see if there are alternate spellings and run again with those
        suggestions = solr_response['spellcheck']['suggestions']
        i = suggestions.index(u'correctlySpelled')
        correctly_spelled = suggestions[i + 1]
        if not correctly_spelled:
            tried_alt_spelling = True
            alt_collation = ODWPortal.externalurls.get_pref_collation(
                suggestions)
            if alt_collation:
                request_q2 = request_q.copy()
                request_q2.__setitem__('q', alt_collation)

                # re-execute search
                (solr_response, num_found, rows, page_num, docs, facets,
                 query_dict_2) = ODWPortal.externalurls.get_docs(
                     request_q2, search_set)
                num_found_int = int(num_found)
                search_logic_string = search_logic(query_dict_2, site_lang)
                search_q, just_q = search_query(query_dict_2)
    else:
        search_logic_string = search_logic(query_dict, site_lang)
        search_q, just_q = search_query(query_dict)
    if site_values['use_external_links'] == '1':
        alt_search_results = alt_search(site_values['site_id'], request_q,
                                        'results')
    else:
        alt_search_results = ''

    kml_count = ODWPortal.externalurls.get_kml_count(request.GET, search_set)
    docs = solr_response['response']['docs']
    highlighting = solr_response['highlighting']
    document_panel = get_doc_block(docs, just_q, highlighting, 'resultView',
                                   site_lang)
    int_rows = int(rows)
    page_nav_bar = page_navigation(num_found_int, int_rows, page_num, search_q,
                                   site_lang)
    facet_panels = facet_panel(facets, search_q, site_lang)
    sort_json = sort_variables(facets)
    facet_q = facet_query(query_dict)
    start = solr_response['response']['start']
    context = {
        "document_panel": document_panel,
        "facets": facets,
        "facetPanels": facet_panels,
        "sortJson": sort_json,
        "numFound": num_found,
        "OriginalNumFound": original_num_found,
        "OriginalQ"
        "start": start,
        "rows": rows,
        "pageNum": page_num,
        "pageNavBar": page_nav_bar,
        'alt_search_results': alt_search_results,
        "searchLogicString": search_logic_string,
        "OriginalQ": original_q,
        "searchQ": search_q,
        "altCollation": alt_collation,
        "facetQ": facet_q,
        "KMLCount": kml_count,
        "triedAltSpelling": tried_alt_spelling,
        'site_values': site_values,
        'site_language': site_lang,
        'resultType': result_type,
        'alt_url': alt_url,
    }
    return render(request, "Portal/results.html", context)
Exemple #3
0
def get_alt_search(query_string, alt_base_url, alt_results_url, action, search_syntax):
    alt_docs_count = 0
    altdocs = ''
    alt_docs_results = ''
    if query_string:
        # production gov docs/portal fail on phrase searches with ampersands/%26
        query_string = query_string.replace('+&+', '+')
        query_string = query_string.replace('+%26+', '+')
        query_string = query_string.replace('%20%26%20', '+')

        # prep URL for passing as link to user
        alt_results_url = "%sresults?%s" % (alt_results_url, query_string)
        # do internal searches for count or results
        if action == "count":
            if SOLR_URL in alt_base_url:
                altcounturl = "%s&%s&rows=0" % (alt_base_url, query_string)
            else:
                altcounturl = "%scount?%s" % (alt_base_url, query_string)
            altdocs = get_alt_docs(altcounturl)
        elif action == "results":
            if SOLR_URL in alt_base_url:
                alt_docs_url = "%s&%s&rows=3" % (alt_base_url, query_string)
            else:
                # utter hack to deal with solr 1.4 json not escaping unparsedQuery  ... i.e. GovDocs
                if '%22' in query_string:
                    query_string = query_string.replace("%22", '')
                    query_string += '&bl=phrase'
                alt_docs_url = "%s%s?%s&rows=3" % (alt_base_url, search_syntax, query_string)
            altdocs = get_alt_docs(alt_docs_url)
            if search_syntax == "rss.xml":
                alt_docs_decode = altdocs[0].decode(encoding='UTF-8')
                alt_docs_results = xmltodict.parse(alt_docs_decode)
            else:
                alt_docs_results = altdocs
                try:
                    alt_docs_results = (alt_docs_results[0].decode(encoding='UTF-8'))
                except UnicodeDecodeError:
                    alt_docs_results = (alt_docs_results[0].decode(encoding="ISO-8859-1"))
                alt_docs_results = json.loads(alt_docs_results)
            if 'solr' in alt_docs_results:
                alt_docs_count = alt_docs_results['solr']['json']['response']['numFound']
                count_docs = int(alt_docs_count)
                if count_docs > 0:
                    docs = alt_docs_results['solr']['json']['response']['docs']
                    alt_docs_results = get_doc_block(docs, "", "", "", "eng")
            elif alt_docs_results['response']['numFound']:
                alt_docs_count = alt_docs_results['response']['numFound']
                count_docs = int(alt_docs_count)
                if count_docs > 0:
                    docs = alt_docs_results['response']['docs']
                    alt_docs_results = get_doc_block(docs, "", "", "", "eng")
        try:
            alt_docs_count_parsable_xml = (altdocs[0].decode(encoding='UTF-8'))
        except UnicodeDecodeError:
            alt_docs_count_parsable_xml = (altdocs[0].decode(encoding="ISO-8859-1"))
        if alt_docs_count_parsable_xml == 'error!':
            # something stupid happened with the url
            one = 1
        elif alt_docs_count_parsable_xml.isdigit():
            # if a raw number
            alt_docs_count = alt_docs_count_parsable_xml
        elif re.search('numFound=', alt_docs_count_parsable_xml):
            # if a solr xml response
            count_object = re.search('numFound=\"(\d.*?)\"', alt_docs_count_parsable_xml)
            if count_object:
                alt_docs_count = count_object.group(1)
        elif re.search('numFound\":', alt_docs_count_parsable_xml):
            # if a solr json response
            count_object = re.search('numFound\":(\d.*?),', alt_docs_count_parsable_xml)
            if count_object:
                alt_docs_count = count_object.group(1)
    return alt_docs_count, alt_results_url, alt_docs_results