1
0
Fork 0
mirror of https://github.com/iiab/iiab.git synced 2025-02-13 11:42:08 +00:00
iiab/roles/0-DEPRECATED-ROLES/osm/templates/map_search.py

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