Beispiel #1
0
  private Query computeQuery(String patternString) {
    String upperPatternString = patternString.toUpperCase();

    boolean hasBooleanSpecifiers =
        upperPatternString.contains(" OR ")
            || upperPatternString.contains(" AND ") // $NON-NLS-1$ //$NON-NLS-2$
            || upperPatternString.contains(" NOT "); // $NON-NLS-1$

    if (!hasBooleanSpecifiers
        && defaultField.equals(FIELD_SUMMARY)
        && !containsSpecialCharacters(patternString)) {
      return new PrefixQuery(new Term(defaultField.getIndexKey(), patternString));
    }
    QueryParser qp =
        new QueryParser(
            Version.LUCENE_CURRENT, defaultField.getIndexKey(), TaskAnalyzer.instance());
    Query q;
    try {
      q = qp.parse(patternString);
    } catch (ParseException e) {
      return new PrefixQuery(new Term(defaultField.getIndexKey(), patternString));
    }

    // relax term clauses to be prefix clauses so that we get results close
    // to what we're expecting
    // from previous task list search
    if (q instanceof BooleanQuery) {
      BooleanQuery query = (BooleanQuery) q;
      for (BooleanClause clause : query.getClauses()) {
        if (clause.getQuery() instanceof TermQuery) {
          TermQuery termQuery = (TermQuery) clause.getQuery();
          clause.setQuery(new PrefixQuery(termQuery.getTerm()));
        }
        if (!hasBooleanSpecifiers) {
          clause.setOccur(Occur.MUST);
        }
      }
    } else if (q instanceof TermQuery) {
      return new PrefixQuery(((TermQuery) q).getTerm());
    }
    return q;
  }
Beispiel #2
0
 protected IndexWriter createIndexWriter(boolean create)
     throws CorruptIndexException, LockObtainFailedException, IOException {
   return new IndexWriter(
       directory, TaskAnalyzer.instance(), create, IndexWriter.MaxFieldLength.UNLIMITED);
 }