docs: @Override
    public void execute(TSDB tsdb, HttpQuery query) {
    
      final HttpMethod method = query.getAPIMethod();
      if (method != HttpMethod.GET && method != HttpMethod.POST) {
        throw new BadRequestException("Unsupported method: " + method.getName());
      }
      
      // the uri will be /api/vX/search/<type> or /api/search/<type>
      final String[] uri = query.explodeAPIPath();
      final String endpoint = uri.length > 1 ? uri[1] : "";
      final SearchType type;
      final SearchQuery search_query;
      
      try {
        type = SearchQuery.parseSearchType(endpoint);
      } catch (IllegalArgumentException e) {
        throw new BadRequestException("Invalid search query type supplied", e);
      }
      
      if (query.hasContent()) {
        search_query = query.serializer().parseSearchQueryV1();
      } else {
        search_query = parseQueryString(query, type);
      }
      
      search_query.setType(type);
      
      if (type == SearchType.LOOKUP) {
        processLookup(tsdb, query, search_query);
        return;
      }
      
      try {
        final SearchQuery results = 
          tsdb.executeSearch(search_query).joinUninterruptibly();
        query.sendReply(query.serializer().formatSearchResultsV1(results));
      } catch (IllegalStateException e) {
        throw new BadRequestException("Searching is not enabled", e);
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }