mirror of
				https://github.com/iiab/iiab.git
				synced 2025-03-09 15:40:17 +00:00 
			
		
		
		
	* fixes to change iiab->osm * change the name in meta too * create osm_install/enabled default flags * add maps alias,copy map.html to index.html * source file names do not change * incorporate osm-fixes in playbook * template rather than copy * add iiab back in for menu system
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Internet-in-a-Box System
 | 
						|
# By Braddock Gaskill, 16 Feb 2013
 | 
						|
# Modified by Tim Moody, 8 Apr 2016
 | 
						|
from utils import whoosh_open_dir_32_or_64
 | 
						|
# from whoosh.qparser import QueryParser
 | 
						|
from whoosh.qparser import MultifieldParser
 | 
						|
from whoosh import sorting
 | 
						|
 | 
						|
from utils import whoosh2dict
 | 
						|
 | 
						|
 | 
						|
class MapSearch(object):
 | 
						|
    def __init__(self, index_dir):
 | 
						|
        """Initialize a search object.
 | 
						|
        index_dir is the Whoosh index directory to use."""
 | 
						|
        self.index_dir = index_dir
 | 
						|
 | 
						|
    def search(self, query, page=1, pagelen=20):
 | 
						|
        """Return a sorted list of results.
 | 
						|
        pagelen specifies the number of hits per page.
 | 
						|
        page specifies the page of results to return (first page is 1)
 | 
						|
        Set pagelen = None or 0 to retrieve all results.
 | 
						|
        """
 | 
						|
        query = unicode(query)  # Must be unicode
 | 
						|
        population_sort_facet = sorting.FieldFacet("population", reverse=True)
 | 
						|
        ix = whoosh_open_dir_32_or_64(self.index_dir)
 | 
						|
        with ix.searcher() as searcher:
 | 
						|
            # query = QueryParser("ngram_name", ix.schema).parse(query)
 | 
						|
            mparser = MultifieldParser(["ngram_name", "admin1_code", "country_code"], schema=ix.schema)
 | 
						|
            query = mparser.parse(query)
 | 
						|
            if pagelen is not None and pagelen != 0:
 | 
						|
                try:
 | 
						|
                    results = searcher.search_page(query, page, pagelen=pagelen)
 | 
						|
                except ValueError, e:  # Invalid page number
 | 
						|
                    results = []
 | 
						|
            else:
 | 
						|
                results = searcher.search(query, limit=None)
 | 
						|
            #r = [x.items() for x in results]
 | 
						|
            r = whoosh2dict(results)
 | 
						|
        ix.close()
 | 
						|
        # experiment with tucking away content for display in popup.
 | 
						|
        print r
 | 
						|
        for d in r:
 | 
						|
            d['popupText'] = 'test content'
 | 
						|
            d['name'] = d['name'] + ', ' + d['admin1_code'] + ', ' + d['country_code']
 | 
						|
 | 
						|
        return r
 | 
						|
 | 
						|
    def count(self, query):
 | 
						|
        """Return total number of matching documents in index"""
 | 
						|
        query = unicode(query)  # Must be unicode
 | 
						|
        ix = whoosh_open_dir_32_or_64(self.index_dir)
 | 
						|
        with ix.searcher() as searcher:
 | 
						|
            query = QueryParser("title", ix.schema).parse(query)
 | 
						|
            results = searcher.search(query)
 | 
						|
            n = len(results)
 | 
						|
        ix.close()
 | 
						|
        return n
 |