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; }
protected IndexWriter createIndexWriter(boolean create) throws CorruptIndexException, LockObtainFailedException, IOException { return new IndexWriter( directory, TaskAnalyzer.instance(), create, IndexWriter.MaxFieldLength.UNLIMITED); }