Example usage for org.apache.lucene.queryparser.flexible.core.nodes QueryNode getTag

List of usage examples for org.apache.lucene.queryparser.flexible.core.nodes QueryNode getTag

Introduction

In this page you can find the example usage for org.apache.lucene.queryparser.flexible.core.nodes QueryNode getTag.

Prototype

public Object getTag(String tagName);

Source Link

Document

Returns object stored under that tag name

Usage

From source file:com.sindicetech.siren.qparser.keyword.builders.AnyQueryNodeBuilder.java

License:Open Source License

public BooleanQuery build(QueryNode queryNode) throws QueryNodeException {
    AnyQueryNode andNode = (AnyQueryNode) queryNode;

    BooleanQuery bQuery = new BooleanQuery();
    List<QueryNode> children = andNode.getChildren();

    if (children != null) {

        for (QueryNode child : children) {
            Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);

            if (obj != null) {
                Query query = (Query) obj;

                try {
                    bQuery.add(query, BooleanClause.Occur.SHOULD);
                } catch (TooManyClauses ex) {

                    throw new QueryNodeException(new MessageImpl(
                            /*
                             * IQQQ.Q0028E_TOO_MANY_BOOLEAN_CLAUSES,
                             * BooleanQuery.getMaxClauseCount()
                             *///from ww w . j  ava  2 s  . com
                            QueryParserMessages.EMPTY_MESSAGE), ex);

                }

            }

        }

    }

    bQuery.setMinimumNumberShouldMatch(andNode.getMinimumMatchingElements());

    return bQuery;

}

From source file:com.sindicetech.siren.qparser.keyword.builders.ArrayQueryNodeBuilder.java

License:Open Source License

@Override
public Query build(final QueryNode queryNode) throws QueryNodeException {
    final ArrayQueryNode arrayNode = (ArrayQueryNode) queryNode;
    final List<QueryNode> children = arrayNode.getChildren();
    final ArrayQuery arrayQuery = new ArrayQuery();

    for (final QueryNode child : children) {
        final Object v = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
        if (v == null) { // DummyNode such as the EmptyNodeQueryNode
            continue;
        }/*from  ww  w . j a  va2  s .  c  om*/
        if (v instanceof Query) {
            if (v instanceof ArrayQuery) {
                /*
                 * Nested array query. It is transformed as a TwigQuery with empty root
                 */
                final TwigQuery twigQuery = new TwigQuery();
                for (final Query qn : ((ArrayQuery) v).getElements()) {
                    final NodeQuery valQuery = (NodeQuery) qn;
                    twigQuery.addChild(valQuery,
                            NodeQueryBuilderUtil.getModifierValue(child, NodeBooleanClause.Occur.MUST));
                }
                arrayQuery.addElement(twigQuery);
            } else {
                arrayQuery.addElement((NodeQuery) v);
            }
        } else {
            throw new QueryNodeException(new MessageImpl(QueryParserMessages.INVALID_SYNTAX,
                    "Unexpected class of a Twig Query clause: " + v == null ? "null" : v.getClass().getName()));
        }
    }
    return arrayQuery;
}

From source file:com.sindicetech.siren.qparser.keyword.builders.BooleanQueryNodeBuilder.java

License:Open Source License

public Query build(final QueryNode queryNode) throws QueryNodeException {
    final BooleanQueryNode booleanNode = (BooleanQueryNode) queryNode;

    final BooleanQuery bQuery = new BooleanQuery();
    final List<QueryNode> children = booleanNode.getChildren();

    if (children != null) {

        for (final QueryNode child : children) {
            final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);

            if (obj != null) {
                final Query query = (Query) obj;

                try {
                    final QueryNode mod;
                    if (child instanceof DatatypeQueryNode) {
                        mod = ((DatatypeQueryNode) child).getChild();
                    } else {
                        mod = child;//from   w  w  w  .  j  ava 2s  .c  om
                    }
                    bQuery.add(query, getModifierValue(mod));

                } catch (final TooManyClauses ex) {

                    throw new QueryNodeException(new MessageImpl(QueryParserMessages.TOO_MANY_BOOLEAN_CLAUSES,
                            BooleanQuery.getMaxClauseCount(),
                            queryNode.toQueryString(new EscapeQuerySyntaxImpl())), ex);

                }

            }

        }

    }

    return bQuery;

}

From source file:com.sindicetech.siren.qparser.keyword.builders.BoostQueryNodeBuilder.java

License:Open Source License

public Query build(final QueryNode queryNode) throws QueryNodeException {
    final BoostQueryNode boostNode = (BoostQueryNode) queryNode;
    final QueryNode child = boostNode.getChild();

    if (child == null) {
        return null;
    }/*from  www.j  a  va  2 s.  c  o m*/

    final Query query = (Query) child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
    query.setBoost(boostNode.getValue());

    return query;
}

From source file:com.sindicetech.siren.qparser.keyword.builders.FieldQueryNodeBuilder.java

License:Open Source License

public NodeQuery build(QueryNode queryNode) throws QueryNodeException {
    final FieldQueryNode fieldNode = (FieldQueryNode) queryNode;

    // if it is tagged as a span query
    if (fieldNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) {
        // create the term span query
        TermSpanQuery tsq = new TermSpanQuery(
                new Term(fieldNode.getFieldAsString(), fieldNode.getTextAsString()));
        // assign the datatype. We must always have a datatype assigned.
        tsq.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));
        return tsq;
    } else {//from   w ww . ja  v  a 2s  .  c  o m
        // create the node term query
        NodeTermQuery ntq = new NodeTermQuery(
                new Term(fieldNode.getFieldAsString(), fieldNode.getTextAsString()));
        // assign the datatype. We must always have a datatype assigned.
        ntq.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));
        return ntq;
    }
}

From source file:com.sindicetech.siren.qparser.keyword.builders.NodeBooleanQueryNodeBuilder.java

License:Open Source License

public NodeQuery build(final QueryNode queryNode) throws QueryNodeException {
    final NodeBooleanQueryNode booleanNode = (NodeBooleanQueryNode) queryNode;
    final List<QueryNode> children = booleanNode.getChildren();
    final NodeBooleanQuery bq = new NodeBooleanQuery();

    if (children == null) {
        return bq; // return empty boolean query
    }//w  w  w  .j  a  v  a  2  s .c om

    // If more than one child, wrap them into a NodeBooleanQuery
    if (children.size() > 1) {
        for (final QueryNode child : children) {
            final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
            if (obj != null) {
                if (obj instanceof NodeQuery) {
                    final QueryNode mod;
                    if (child instanceof DatatypeQueryNode) {
                        mod = ((DatatypeQueryNode) child).getChild();
                    } else {
                        mod = child;
                    }
                    bq.add((NodeQuery) obj,
                            NodeQueryBuilderUtil.getModifierValue(mod, NodeBooleanClause.Occur.SHOULD));
                } else {
                    throw new QueryNodeException(
                            new Error("Expected NodeQuery: got '" + obj.getClass().getCanonicalName() + "'"));
                }
            }
        }
        return bq;
    }
    // If only one child, return it directly
    else {
        final Object obj = children.get(0).getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
        if (obj != null) {
            if (obj instanceof NodeQuery) {
                return (NodeQuery) obj;
            } else {
                throw new QueryNodeException(
                        new Error("Non NodeQuery query '" + obj.getClass().getCanonicalName() + "' received"));
            }
        }
        return bq; // return empty boolean query
    }
}

From source file:com.sindicetech.siren.qparser.keyword.builders.NodeFuzzyQueryNodeBuilder.java

License:Open Source License

public NodeQuery build(QueryNode queryNode) throws QueryNodeException {
    FuzzyQueryNode fuzzyNode = (FuzzyQueryNode) queryNode;
    String text = fuzzyNode.getTextAsString();

    int numEdits = FuzzyQuery.floatToEdits(fuzzyNode.getSimilarity(), text.codePointCount(0, text.length()));

    NodeFuzzyQuery fuzzyQuery = new NodeFuzzyQuery(
            new Term(fuzzyNode.getFieldAsString(), fuzzyNode.getTextAsString()), numEdits,
            fuzzyNode.getPrefixLength());
    // assign the datatype. We must always have a datatype assigned.
    fuzzyQuery.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));

    // if it is tagged as a span query
    if (fuzzyNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) {
        return new MultiTermSpanQuery<>(fuzzyQuery);
    } else {/* w  w  w. j av a 2  s .c o  m*/
        return fuzzyQuery;
    }
}

From source file:com.sindicetech.siren.qparser.keyword.builders.NodeNumericRangeQueryNodeBuilder.java

License:Open Source License

public NodeNumericRangeQuery<? extends Number> build(final QueryNode queryNode) throws QueryNodeException {
    final NodeNumericRangeQueryNode numericRangeNode = (NodeNumericRangeQueryNode) queryNode;

    final NumericQueryNode lowerNumericNode = numericRangeNode.getLowerBound();
    final NumericQueryNode upperNumericNode = numericRangeNode.getUpperBound();

    final Number lowerNumber, upperNumber;

    if (lowerNumericNode != null) {
        lowerNumber = lowerNumericNode.getValue();
    } else {/*from   w  w w .  j a  v a 2s.  c om*/
        lowerNumber = null;
    }

    if (upperNumericNode != null) {
        upperNumber = upperNumericNode.getValue();
    } else {
        upperNumber = null;
    }

    final NumericAnalyzer numericAnalyzer = numericRangeNode.getNumericAnalyzer();
    final NumericType numberType = numericRangeNode.getNumericType();
    final String field = numericRangeNode.getField().toString();
    final boolean minInclusive = numericRangeNode.isLowerInclusive();
    final boolean maxInclusive = numericRangeNode.isUpperInclusive();
    final int precisionStep = numericAnalyzer.getPrecisionStep();

    NodeNumericRangeQuery query = this.newNodeNumericRangeQuery(numberType, field, precisionStep, lowerNumber,
            upperNumber, minInclusive, maxInclusive);
    // assign the datatype. We must always have a datatype assigned.
    query.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));
    return query;
}

From source file:com.sindicetech.siren.qparser.keyword.builders.NodePhraseQueryNodeBuilder.java

License:Open Source License

public NodePhraseQuery build(final QueryNode queryNode) throws QueryNodeException {
    final TokenizedPhraseQueryNode phraseNode = (TokenizedPhraseQueryNode) queryNode;

    final NodePhraseQuery phraseQuery = new NodePhraseQuery();
    final List<QueryNode> children = phraseNode.getChildren();

    if (children != null) {
        for (QueryNode child : children) {
            // the query node should always be a FieldQueryNode
            assert child instanceof FieldQueryNode;
            final FieldQueryNode termNode = (FieldQueryNode) child;
            final NodeTermQuery termQuery = (NodeTermQuery) child
                    .getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID);
            phraseQuery.add(termQuery.getTerm(), termNode.getPositionIncrement());
        }/*  w w w.  j ava2s  .c  o m*/
    }
    // assign the datatype. We must always have a datatype assigned.
    phraseQuery.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));
    return phraseQuery;
}

From source file:com.sindicetech.siren.qparser.keyword.builders.NodePrefixWildcardQueryNodeBuilder.java

License:Open Source License

public NodeQuery build(final QueryNode queryNode) throws QueryNodeException {
    final PrefixWildcardQueryNode wildcardNode = (PrefixWildcardQueryNode) queryNode;

    final String text = wildcardNode.getText().subSequence(0, wildcardNode.getText().length() - 1).toString();
    final NodePrefixQuery q = new NodePrefixQuery(new Term(wildcardNode.getFieldAsString(), text));
    // assign the datatype. We must always have a datatype assigned.
    q.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID));

    final MultiNodeTermQuery.RewriteMethod method = (MultiNodeTermQuery.RewriteMethod) queryNode
            .getTag(MultiNodeTermRewriteMethodProcessor.TAG_ID);

    if (method != null) {
        q.setRewriteMethod(method);/* w  ww. j a  va2s .c om*/
    }

    // if it is tagged as a span query
    if (wildcardNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) {
        return new MultiTermSpanQuery<>(q);
    } else {
        return q;
    }
}