docs: public List<M> search(String datefield, Date date, int width, int height, int count, int offset, UserAccount account, String query, List<String> sources) {
  
          List<Criteria> l = new ArrayList<>();
          Query<M> q = getDatastore().createQuery(clazz);
          if (query != null) {
              Pattern p = Pattern.compile("(.*)" + query + "(.*)", Pattern.CASE_INSENSITIVE);
              l.add(q.or(
                      q.criteria("title").equal(p),
                      q.criteria("description").equal(p)
              ));
          }
          if (account != null) {
              l.add(q.criteria("contributor").equal(account));
          }
          if (width > 0)
              l.add(q.criteria("width").greaterThanOrEq(width));
          if (height > 0)
              l.add(q.criteria("height").greaterThanOrEq(height));
          if (date != null)
              l.add(q.criteria(datefield).greaterThanOrEq(date));
          if (sources != null)
              l.add(q.criteria("source").in(sources));
          q.and(l.toArray(new Criteria[l.size()]));
          return q.order("crawlDate").offset(offset).limit(count).asList();
      }