List of usage examples for org.apache.lucene.search PhraseQuery rewrite
@Override
public Query rewrite(IndexReader reader) throws IOException
From source file:minoe.SearchFiles.java
/** * Separates a query into spanqueries./*from ww w .j a v a2 s . c om*/ * @param query * @param termList * @param reader * @return */ public ArrayList buildClauses(Query query, ArrayList<SpanQuery> termList, IndexReader reader) { try { if (query instanceof BooleanQuery) { // this is a boolean query OR this is a boolean query BooleanQuery bq = (BooleanQuery) query; BooleanClause[] bclauses = bq.getClauses(); for (int i = 0; i < bclauses.length; i++) { Query childQuery = bclauses[i].getQuery(); // Rewrite this clause e.g one* becomes (one OR onerous) childQuery.rewrite(reader); buildClauses(childQuery, termList, reader); } } else if (query instanceof PhraseQuery) { // phrasequery ex: "this is a phrase query" // convert phrase queries to SpanNearQuery because // phrase queries will do the phrase out of order. PhraseQuery pq = (PhraseQuery) query; Term[] termArr = pq.getTerms(); SpanTermQuery[] thisSpan = new SpanTermQuery[termArr.length]; for (int i = 0; i < termArr.length; i++) { Term term = termArr[i]; SpanTermQuery termSpan = new SpanTermQuery(term); thisSpan[i] = termSpan; } SpanNearQuery snq = new SpanNearQuery(thisSpan, 0, true); termList.add(snq); } else if (query instanceof TermQuery) { // add to queryList TermQuery tq = (TermQuery) query; Term term = tq.getTerm(); SpanQuery stq = new SpanTermQuery(term); termList.add(stq); } else if (query instanceof WildcardQuery) { // wildcard query can be like: "?ild*" WildcardQuery wq = (WildcardQuery) query; // Rewrite this clause e.g one* becomes (one OR onerous) Query q = wq.rewrite(reader); buildClauses(q, termList, reader); } else if (query instanceof PrefixQuery) { // prefix query ex: "fish*" PrefixQuery pq = (PrefixQuery) query; Query q = pq.rewrite(reader); buildClauses(q, termList, reader); } } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Unknown query type: " + ex.toString()); } return termList; }