Search Provider¶
When building application with large dataset, it is common to not use your primary storage to search for resources, but rather search through an external indexing service such as ElasticSearch.
MorpFW provides a overrideable search provider API for you to intercept the search mechanism and put your own search logic.
- class morpfw.interfaces.ISearchProvider¶
- abstract parse_query(qs: str) dict ¶
Parse query string from search query and convert it into rulez query dictionary. The dictionary would be passed to search method afterwards, which you can then parse into your backend search query.
Overriding Search Provider¶
import typing
import morpfw
from .app import App
from .model import PageCollection
class PagesSearchProvider(morpfw.SearchProvider):
def search(self, query=None, offset=0, limit=None, order_by=None):
"""search for resources and return list of resource model objects"""
result = []
# do something here
return result
@App.searchprovider(model=PageCollection)
def get_searchprovider(context):
return PagesSearchProvider(context)