public Builder parseAnnotationQuery(@Nullable String annotationQuery) {
      if (annotationQuery == null || annotationQuery.isEmpty()) return this;
      Map<String, String> map = new LinkedHashMap<>();
      for (String ann : annotationQuery.split(" and ", 100)) {
        int idx = ann.indexOf('=');
        if (idx == -1) {
          // put the annotation only if there is no key present already, prevents overriding more specific tags
          ann = ann.trim();
          if (!map.containsKey(ann)) map.put(ann, "");
        } else {
          // tag
          String[] keyValue = ann.split("=", 2);
          // tags are put regardless, i.e. last tag wins
          map.put(ann.substring(0, idx).trim(),
            keyValue.length < 2 ? "" : ann.substring(idx + 1).trim());
        }
      }
      return annotationQuery(map);
    }
Corresponds to query parameter "annotationQuery". Ex. "http.method=GET and error". Parameter
keys and values are trimmed.

@see QueryRequest#annotationQueryString()
zipkin/src/main/java/zipkin2/storage/QueryRequest.java