def _parse_whoosh_response(query, results): """ Parses Whoosh's response and returns as an ifind Response. Args: query (ifind Query): object encapsulating details of a search query. results : requests library response object containing search results. Returns: ifind Response: object encapsulating a search request's results. Usage: Private method. """ response = Response(query.terms) # Dmax thinks this line is incorrect. # I've substituted it with a line just before returning the response... #response.result_total = results.pagecount r = 0 for result in results: r = r + 1 title = result["title"] if title: title = title.strip() else: title = "Untitled" rank = ((int(results.pagenum)-1) * results.pagelen) + r url = "/treconomics/" + str(result.docnum) summary = result.highlights("content") trecid = result["docid"] trecid = trecid.strip() #score = result["score"] source = result["source"] response.add_result(title=title, url=url, summary=summary, docid=trecid, source=source, rank=rank, whooshid=result.docnum, score=result.score) #if len(response) == query.top: # break # Dmax has added this line as a replacement for the one commented out above. response.result_total = len(results) # Add the total number of pages from the results object as an attribute of our response object. # We also add the total number of results shown on the page. setattr(response, 'total_pages', results.pagecount) setattr(response, 'results_on_page', results.pagelen) setattr(response, 'actual_page', results.actual_page) return response
def _parse_whoosh_response(query, search_page, field, fragmenter, snippet_size): """ Parses Whoosh's response and returns as an ifind Response. Args: query (ifind Query): object encapsulating details of a search query. results : requests library response object containing search results. Returns: ifind Response: object encapsulating a search request's results. Usage: Private method. """ response = Response(query.terms) r = 0 search_page.results.fragmenter = fragmenter for result in search_page: title = result["title"] if title: title = title.strip() else: title = "Untitled" if title == '': title = "Untitled" rank = result.rank + 1 url = "/treconomics/" + str(result.docnum) summary = result.highlights(field,top=snippet_size) content = result[field] trecid = result["docid"] trecid = trecid.strip() source = result["source"] response.add_result(title=title, url=url, summary=summary, docid=trecid, source=source, rank=rank, whooshid=result.docnum, score=result.score, content=content) response.result_total = len(search_page) # Add the total number of pages from the results object as an attribute of our response object. # We also add the total number of results shown on the page. setattr(response, 'total_pages', search_page.pagecount) setattr(response, 'results_on_page', search_page.pagelen) setattr(response, 'actual_page', search_page.actual_page) return response