code: function _matchByWords(stopwords, parentCheckerFn) {
      return function(query, suggestions) {
          var queryTokens;
          var matches = [];
  
          if (parentCheckerFn(suggestions)) {
              queryTokens = text_util.splitTokens(text_util.split(query, stopwords));
  
              collection_util.each(suggestions, function(suggestion, i) {
                  var suggestedValue = suggestion.value;
  
                  if (text_util.stringEncloses(query, suggestedValue)) {
                      return false;
                  }
  
                  // check if query words are a subset of suggested words
                  var suggestionWords = text_util.splitTokens(text_util.split(suggestedValue, stopwords));
  
                  if (collection_util.minus(queryTokens, suggestionWords).length === 0) {
                      matches.push(i);
                  }
              });
          }
  
          return matches.length === 1 ? matches[0] : -1;
      }
  }
docs: Сравнивает запрос c подсказками, по словам.
  Срабатывает, только если у всех подсказок общий родитель
  (функция сверки передаётся параметром).
  Игнорирует стоп-слова.
  Возвращает индекс единственной подходящей подсказки
  или -1, если подходящих нет или несколько.