Example usage for org.apache.lucene.util.automaton Automata makeBinaryInterval

List of usage examples for org.apache.lucene.util.automaton Automata makeBinaryInterval

Introduction

In this page you can find the example usage for org.apache.lucene.util.automaton Automata makeBinaryInterval.

Prototype

public static Automaton makeBinaryInterval(BytesRef min, boolean minInclusive, BytesRef max,
        boolean maxInclusive) 

Source Link

Document

Creates a new deterministic, minimal automaton accepting all binary terms in the specified interval.

Usage

From source file:org.opengrok.suggest.query.SuggesterRangeQuery.java

License:Open Source License

/** {@inheritDoc} */
@Override//from  w ww .j  av a  2  s.c  o m
public TermsEnum getTermsEnumForSuggestions(final Terms terms) {
    if (terms == null) {
        return TermsEnum.EMPTY;
    }

    BytesRef prefix = getPrefix();
    if (prefix != null) {
        Automaton prefixAutomaton = PrefixQuery.toAutomaton(prefix);

        Automaton finalAutomaton;
        if (suggestPosition == SuggestPosition.LOWER) {
            Automaton binaryInt = Automata.makeBinaryInterval(getLowerTerm(), includesLower(), getUpperTerm(),
                    includesUpper());

            finalAutomaton = Operations.intersection(binaryInt, prefixAutomaton);
        } else {
            Automaton binaryInt = Automata.makeBinaryInterval(null, true, getLowerTerm(), !includesLower());

            finalAutomaton = Operations.minus(prefixAutomaton, binaryInt, Integer.MIN_VALUE);
        }

        CompiledAutomaton compiledAutomaton = new CompiledAutomaton(finalAutomaton);
        try {
            return compiledAutomaton.getTermsEnum(terms);
        } catch (IOException e) {
            logger.log(Level.WARNING, "Could not compile automaton for range suggestions", e);
        }
    }

    return TermsEnum.EMPTY;
}