combine method

dynamic combine(
  1. MatchData otherMatchData
)

An instance of MatchData will be created for every term that matches a document. However only one instance is required in a result. This method combines metadata from another instance of MatchData with this objects metadata.

otherMatchData - Another instance of match data to merge with this one.

Implementation

combine(MatchData otherMatchData) {
  Iterable<String> terms = otherMatchData.metadata.keys;

  for (String term in terms) {
    Iterable<String> fields = otherMatchData.metadata[term]!.keys;

    if (!metadata.containsKey(term)) {
      metadata[term] = {};
    }

    for (String field in fields) {
      Iterable<String> keys = otherMatchData.metadata[term]![field]!.keys;

      if (!metadata[term]!.containsKey(field)) {
        metadata[term]![field] = {};
      }

      for (String key in keys) {
        if (!metadata[term]![field]!.containsKey(key)) {
          metadata[term]![field]![key] =
              otherMatchData.metadata[term]![field]![key]!;
        } else {
          metadata[term]![field]![key] = [
            ...metadata[term]![field]![key]!,
            ...otherMatchData.metadata[term]![field]![key]!
          ];
        }
      }
    }
  }
}