diff --git a/swh/web/api/views/origin.py b/swh/web/api/views/origin.py --- a/swh/web/api/views/origin.py +++ b/swh/web/api/views/origin.py @@ -168,6 +168,7 @@ results. :param string url_pattern: a string pattern + :query string query_string: search query language string :query int limit: the maximum number of found origins to return (bounded to 1000) :query boolean with_visit: if true, only return origins with at least @@ -189,12 +190,14 @@ result = {} limit = min(int(request.query_params.get("limit", "70")), 1000) page_token = request.query_params.get("page_token") + query_string = request.query_params.get("query", "") with_visit = request.query_params.get("with_visit", "false") visit_type = request.query_params.get("visit_type") (results, page_token) = api_lookup( archive.search_origin, url_pattern, + query_string, limit, bool(strtobool(with_visit)), [visit_type] if visit_type else None, diff --git a/swh/web/common/archive.py b/swh/web/common/archive.py --- a/swh/web/common/archive.py +++ b/swh/web/common/archive.py @@ -297,6 +297,7 @@ def search_origin( url_pattern: str, + query: str, limit: int = 50, with_visit: bool = False, visit_types: Optional[List[str]] = None, @@ -307,6 +308,7 @@ Args: url_pattern: the string pattern to search for in origin urls + query: swh search query language string limit: the maximum number of found origins to return with_visit: Whether origins with no visit are to be filtered out visit_types: Only origins having any of the provided visit types @@ -321,13 +323,23 @@ assert isinstance(page_token, str) if search: - page_result = search.origin_search( - url_pattern=url_pattern, - page_token=page_token, - with_visit=with_visit, - visit_types=visit_types, - limit=limit, - ) + if config.get_config().get("use_query_language"): + page_result = search.origin_search( + query=query, + url_pattern=url_pattern, + page_token=page_token, + with_visit=with_visit, + visit_types=visit_types, + limit=limit, + ) + else: + page_result = search.origin_search( + url_pattern=url_pattern, + page_token=page_token, + with_visit=with_visit, + visit_types=visit_types, + limit=limit, + ) origins = [converters.from_origin(ori_dict) for ori_dict in page_result.results] else: # Fallback to swh-storage if swh-search is not configured diff --git a/swh/web/config.py b/swh/web/config.py --- a/swh/web/config.py +++ b/swh/web/config.py @@ -132,6 +132,7 @@ "counters_backend": ("string", "swh-storage"), # or "swh-counters" "staging_server_names": ("list", STAGING_SERVER_NAMES), "instance_name": ("str", "archive-test.softwareheritage.org"), + "use_query_language": ("bool", True), } swhweb_config: Dict[str, Any] = {}