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)
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)
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