Example usage for org.apache.lucene.search PhraseQuery rewrite

List of usage examples for org.apache.lucene.search PhraseQuery rewrite

Introduction

In this page you can find the example usage for org.apache.lucene.search PhraseQuery rewrite.

Prototype

@Override
    public Query rewrite(IndexReader reader) throws IOException 

Source Link

Usage

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;
}