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

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

Introduction

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

Prototype

public void setTag(String tagName, Object value);

Source Link

Document

Associate the specified value with the specified tagName.

Usage

From source file:com.sindicetech.siren.qparser.keyword.processors.DatatypeProcessor.java

License:Open Source License

@Override
protected QueryNode preProcessNode(QueryNode node) throws QueryNodeException {
    final QueryConfigHandler conf = this.getQueryConfigHandler();

    // If the current node is a datatype query node, validate the datatype and assign it to its child
    if (node instanceof DatatypeQueryNode) {
        final Map<String, Analyzer> dtAnalyzers = conf.get(KeywordConfigurationKeys.DATATYPES_ANALYZERS);
        final DatatypeQueryNode dt = (DatatypeQueryNode) node;
        String datatype = dt.getDatatype();

        // check if the datatype is correctly registered
        if (dtAnalyzers == null) {
            throw new IllegalArgumentException("KeywordConfigurationKeys.DATAYPES_ANALYZERS "
                    + "should be set on the ExtendedKeywordQueryConfigHandler");
        }//from w w w .  ja va2 s  . c  om
        if (!dtAnalyzers.containsKey(datatype)) {
            throw new IllegalArgumentException("Unknown datatype: [" + datatype + "]");
        }
        if (dtAnalyzers.get(datatype) == null) {
            throw new IllegalArgumentException("Analyzer of datatype [" + datatype + "] cannot be null.");
        }

        // transfer the datatype to its child
        dt.getChild().setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
    }
    // If the current node is a twig query node, assign the json:field datatype to the root, and assign the default
    // or the tagged datatype to the child
    else if (node instanceof TwigQueryNode) {
        final TwigQueryNode twig = (TwigQueryNode) node;
        if (twig.getTag(DatatypeQueryNode.DATATYPE_TAGID) == null) {
            twig.getChild().setTag(DatatypeQueryNode.DATATYPE_TAGID, this.getDefaultDatatype(conf));
        } else {
            twig.getChild().setTag(DatatypeQueryNode.DATATYPE_TAGID, this.getDatatype(conf, node));
        }
        twig.getRoot().setTag(DatatypeQueryNode.DATATYPE_TAGID, JSONDatatype.JSON_FIELD);
    }
    // in any other cases, if the node is not a leaf node, transfer the datatype to its children
    else if (!node.isLeaf()) {
        for (final QueryNode child : node.getChildren()) {
            child.setTag(DatatypeQueryNode.DATATYPE_TAGID, this.getDatatype(conf, node));
        }
    }

    return node;
}

From source file:com.sindicetech.siren.qparser.keyword.processors.MultiNodeTermRewriteMethodProcessor.java

License:Open Source License

@Override
protected QueryNode postProcessNode(final QueryNode node) {

    // set setMultiTermRewriteMethod for WildcardQueryNode and
    // PrefixWildcardQueryNode
    if (node instanceof WildcardQueryNode || node instanceof AbstractRangeQueryNode
            || node instanceof RegexpQueryNode) {

        final MultiNodeTermQuery.RewriteMethod rewriteMethod = this.getQueryConfigHandler()
                .get(KeywordConfigurationKeys.MULTI_NODE_TERM_REWRITE_METHOD);

        if (rewriteMethod == null) {
            // This should not happen, this configuration is set in the
            // StandardQueryConfigHandler
            throw new IllegalArgumentException(
                    "KeywordConfigurationKeys.MULTI_NODE_TERM_REWRITE_METHOD should be set on the QueryConfigHandler");
        }//from ww w . ja  va  2 s  .c om

        // use a TAG to take the value to the Builder
        node.setTag(MultiNodeTermRewriteMethodProcessor.TAG_ID, rewriteMethod);

    }

    return node;
}

From source file:com.sindicetech.siren.qparser.keyword.processors.NodeNumericQueryNodeProcessor.java

License:Open Source License

@Override
protected QueryNode postProcessNode(QueryNode node) throws QueryNodeException {

    if (node instanceof FieldQueryNode && !(node.getParent() instanceof RangeQueryNode)) {
        final FieldQueryNode fieldNode = (FieldQueryNode) node;

        String datatype = (String) DatatypeProcessor.getDatatype(this.getQueryConfigHandler(), node);
        final Map<String, Analyzer> dts = this.getQueryConfigHandler()
                .get(KeywordConfigurationKeys.DATATYPES_ANALYZERS);
        final Analyzer analyzer = dts.get(node.getTag(DatatypeQueryNode.DATATYPE_TAGID));

        if (analyzer instanceof NumericAnalyzer) {
            final NumericAnalyzer na = (NumericAnalyzer) analyzer;
            final char[] text = fieldNode.getTextAsString().toCharArray();
            final ReusableCharArrayReader textReader = new ReusableCharArrayReader(text);
            final Number number;
            try {
                number = na.getNumericParser().parse(textReader);
            } catch (final Exception e) {
                throw new QueryNodeParseException(
                        new MessageImpl(QueryParserMessages.COULD_NOT_PARSE_NUMBER, text), e);
            }//from   ww w.j av  a 2s  . c o m

            final CharSequence field = fieldNode.getField();
            final NodeNumericQueryNode lowerNode = new NodeNumericQueryNode(field, number);
            // assign datatype
            lowerNode.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
            final NodeNumericQueryNode upperNode = new NodeNumericQueryNode(field, number);
            // assign datatype
            upperNode.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);

            // Create the NodeNumericRangeQueryNode
            node = new NodeNumericRangeQueryNode(lowerNode, upperNode, true, true, na);
            // assign datatype
            node.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
        }
    }
    return node;
}

From source file:com.sindicetech.siren.qparser.keyword.processors.NodeNumericRangeQueryNodeProcessor.java

License:Open Source License

@Override
protected QueryNode postProcessNode(QueryNode node) throws QueryNodeException {
    if (node instanceof TermRangeQueryNode) {
        final TermRangeQueryNode termRangeNode = (TermRangeQueryNode) node;

        String datatype = (String) DatatypeProcessor.getDatatype(this.getQueryConfigHandler(), node);
        final Map<String, Analyzer> dts = this.getQueryConfigHandler()
                .get(KeywordConfigurationKeys.DATATYPES_ANALYZERS);
        final Analyzer analyzer = dts.get(datatype);

        if (analyzer instanceof NumericAnalyzer) {
            final NumericAnalyzer na = (NumericAnalyzer) analyzer;

            final FieldQueryNode lower = termRangeNode.getLowerBound();
            final FieldQueryNode upper = termRangeNode.getUpperBound();

            final char[] lowerText = lower.getTextAsString().toCharArray();
            final char[] upperText = upper.getTextAsString().toCharArray();

            // Parse the lower and upper bound
            final NumericParser<?> parser = na.getNumericParser();
            final Number lowerNumber;
            try {
                if (lowerText.length == 0) { // open bound
                    lowerNumber = null;/*from  w  ww .j av a 2  s. co  m*/
                } else {
                    final ReusableCharArrayReader lowerReader = new ReusableCharArrayReader(lowerText);
                    lowerNumber = parser.parse(lowerReader);
                }
            } catch (final Exception e) {
                throw new QueryNodeParseException(new MessageImpl(QueryParserMessages.COULD_NOT_PARSE_NUMBER,
                        lowerText, parser.getNumericType() + " parser"), e);
            }
            final Number upperNumber;
            try {
                if (upperText.length == 0) { // open bound
                    upperNumber = null;
                } else {
                    final ReusableCharArrayReader upperReader = new ReusableCharArrayReader(upperText);
                    upperNumber = parser.parse(upperReader);
                }
            } catch (final Exception e) {
                throw new QueryNodeParseException(new MessageImpl(QueryParserMessages.COULD_NOT_PARSE_NUMBER,
                        upperText, parser.getNumericType() + " parser"), e);
            }

            // Create two NodeNumericQueryNode for the lower and upper bound
            final CharSequence field = termRangeNode.getField();
            final NodeNumericQueryNode lowerNode = new NodeNumericQueryNode(field, lowerNumber);
            // assign datatype
            lowerNode.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
            final NodeNumericQueryNode upperNode = new NodeNumericQueryNode(field, upperNumber);
            // assign datatype
            upperNode.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);

            final boolean lowerInclusive = termRangeNode.isLowerInclusive();
            final boolean upperInclusive = termRangeNode.isUpperInclusive();

            // Create the NodeNumericRangeQueryNode
            node = new NodeNumericRangeQueryNode(lowerNode, upperNode, lowerInclusive, upperInclusive, na);
            // assign datatype
            node.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
        }
    }
    return node;
}

From source file:com.sindicetech.siren.qparser.keyword.processors.QueryTypeProcessor.java

License:Open Source License

@Override
protected QueryNode preProcessNode(QueryNode node) throws QueryNodeException {
    // If the current node is a group query node, check the query type and assign it to its children
    if (node instanceof GroupQueryNode) {
        GroupQueryNode groupQueryNode = (GroupQueryNode) node;
        String queryType = null;/*  ww w. j a v  a2 s  .co m*/

        if (node instanceof NodeGroupQueryNode) {
            queryType = NODE_QUERYTYPE;
        } else if (node instanceof SpanGroupQueryNode) {
            queryType = SPAN_QUERYTYPE;
        } else {
            throw new QueryNodeException(new MessageImpl("Invalid GroupQueryNode received",
                    node.toQueryString(new EscapeQuerySyntaxImpl())));
        }

        // transfer the query type to its child
        groupQueryNode.getChild().setTag(QUERYTYPE_TAG, queryType);
    }
    // in any other cases, if the node is not a leaf node, transfer the query type to its children
    else if (!node.isLeaf()) {
        if (node.getTag(QUERYTYPE_TAG) != null) {
            for (final QueryNode child : node.getChildren()) {
                child.setTag(QUERYTYPE_TAG, node.getTag(QUERYTYPE_TAG));
            }
        }
    }

    return node;
}

From source file:org.sindice.siren.qparser.keyword.processors.DatatypeQueryNodeProcessor.java

License:Apache License

@Override
protected QueryNode preProcessNode(final QueryNode node) throws QueryNodeException {
    if (node instanceof DatatypeQueryNode) {
        // Set the datatype analyzer to use on the descendant querynodes
        final QueryConfigHandler conf = this.getQueryConfigHandler();
        final Map<String, Analyzer> dtAnalyzers = conf.get(KeywordConfigurationKeys.DATATYPES_ANALYZERS);
        final DatatypeQueryNode dt = (DatatypeQueryNode) node;

        if (dtAnalyzers == null) {
            throw new IllegalArgumentException("KeywordConfigurationKeys.DATAYPES_ANALYZERS "
                    + "should be set on the KeywordQueryConfigHandler");
        }/*from w  w w.j av  a 2 s .c  o  m*/
        if (!dtAnalyzers.containsKey(dt.getDatatype())) {
            throw new IllegalArgumentException("Unknown datatype: [" + dt.getDatatype() + "]");
        }
        // check no datatype is already set
        if (datatype != null) {
            throw new IllegalArgumentException("Cannot use more than one datatype in a same tree. " + "Using ["
                    + datatype + "], but receieved also [" + dt.getDatatype() + "]");
        }
        if (dtAnalyzers.get(dt.getDatatype()) == null) {
            throw new IllegalArgumentException("Analyzer of datatype [" + datatype + "] cannot be null.");
        }

        datatype = dt.getDatatype();
    }
    // parent twig query
    else if (node instanceof TwigQueryNode) {
        nbTwigs++;
        if (nbTwigs == 1) {
            // Set the json:field datatype on the top level node only
            final TwigQueryNode twig = (TwigQueryNode) node;
            twig.getRoot().setTag(DatatypeQueryNode.DATATYPE_TAGID, JSONDatatype.JSON_FIELD);
        }
    }
    // A datatype is being used
    else if (datatype != null) {
        node.setTag(DatatypeQueryNode.DATATYPE_TAGID, datatype);
    }
    // Default datatype
    else if (node.getTag(DatatypeQueryNode.DATATYPE_TAGID) == null) {
        node.setTag(DatatypeQueryNode.DATATYPE_TAGID, XSDDatatype.XSD_STRING);
    }
    return node;
}