def create_searcher(self): if self.config.has_section("search"): self.options = dict(self.config.items("search")) self.engine_name = self.config.get("search", "engine") else: raise CubesError("Search engine not configured.") self.logger.debug("using search engine: %s" % self.engine_name) options = dict(self.options) del options["engine"] self.searcher = cubes_search.create_searcher(self.engine_name, browser=self.browser, locales=self.locales, **options)
def cube_search(cube_name): # TODO: this is ported from old Werkzeug slicer, requires revision config = current_app.config if config.has_section("search"): options = dict(config.items("search")) engine_name = options.pop("engine") else: raise ConfigurationError("Search engine is not configured.") logger.debug("using search engine: %s" % engine_name) search_engine = cubes_search.create_searcher(engine_name, browser=g.browser, locales=g.locales, **options) dimension = request.args.get("dimension") if not dimension: raise RequestError("No search dimension provided") query = request.args.get("query") if not query: raise RequestError("No search query provided") locale = g.locale or g.locales[0] logger.debug("searching for '%s' in %s, locale %s" % (query, dimension, locale)) search_result = search_engine.search(query, dimension, locale=locale) result = { "matches": search_result.dimension_matches(dimension), "dimension": dimension, "total_found": search_result.total_found, "locale": locale } if search_result.error: result["error"] = search_result.error if search_result.warning: result["warning"] = search_result.warning return jsonify(result)