code: protected Query getMultiTermQueryFilter(String field, String termsStr, List<String> termsList) {
  
          if (termsStr == null) {
              StringBuffer buf = new StringBuffer(64);
              for (int i = 0; i < termsList.size(); i++) {
                  if (i > 0) {
                      buf.append(' ');
                  }
                  buf.append(termsList.get(i));
              }
              termsStr = buf.toString();
          }
          Query result = m_displayFilters.get(
              (new StringBuffer(64)).append(field).append('|').append(termsStr).toString());
          if (result == null) {
              List<Term> terms = new ArrayList<Term>();
              if (termsList == null) {
                  termsList = CmsStringUtil.splitAsList(termsStr, ' ');
              }
              for (int i = 0; i < termsList.size(); i++) {
                  terms.add(new Term(field, termsList.get(i)));
              }
  
              BooleanQuery.Builder build = new BooleanQuery.Builder();
              terms.forEach(term -> build.add(new TermQuery(term), Occur.SHOULD));
              Query termsQuery = build.build(); //termsFilter
  
              try {
                  result = termsQuery.createWeight(m_indexSearcher, ScoreMode.COMPLETE_NO_SCORES, 1).getQuery();
                  m_displayFilters.put(field + termsStr, result);
              } catch (IOException e) {
                  // TODO don't know what happend
                  e.printStackTrace();
              }
          }
          return result;
      }
docs: Returns a cached Lucene term query filter for the given field and terms.<p>
  
  @param field the field to use
  @param termsStr the terms to use as a String separated by a space ' ' char
  @param termsList the list of terms to use
  
  @return a cached Lucene term query filter for the given field and terms