@Override
  public int countScoredFieldNames(Query query, String[] filedNames) {
    int count = 0;

    for (String fieldName : filedNames) {
      WeightedTerm[] weightedTerms = QueryTermExtractor.getTerms(query, false, fieldName);

      if ((weightedTerms.length > 0)
          && !ArrayUtil.contains(Field.UNSCORED_FIELD_NAMES, fieldName)) {

        count++;
      }
    }

    return count;
  }
  @Override
  public Set<String> getQueryTerms(Query query) {
    String queryString = StringUtil.replace(query.toString(), StringPool.STAR, StringPool.BLANK);

    Query tempQuery = null;

    try {
      QueryParser queryParser = new QueryParser(getVersion(), StringPool.BLANK, getAnalyzer());

      tempQuery = queryParser.parse(queryString);
    } catch (Exception e) {
      if (_log.isWarnEnabled()) {
        _log.warn("Unable to parse " + queryString);
      }

      tempQuery = query;
    }

    WeightedTerm[] weightedTerms = null;

    for (String fieldName : Field.KEYWORDS) {
      weightedTerms = QueryTermExtractor.getTerms(tempQuery, false, fieldName);

      if (weightedTerms.length > 0) {
        break;
      }
    }

    Set<String> queryTerms = new HashSet<String>();

    for (WeightedTerm weightedTerm : weightedTerms) {
      queryTerms.add(weightedTerm.getTerm());
    }

    return queryTerms;
  }