Example usage for org.apache.solr.client.solrj.util ClientUtils escapeQueryChars

List of usage examples for org.apache.solr.client.solrj.util ClientUtils escapeQueryChars

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj.util ClientUtils escapeQueryChars.

Prototype


public static String escapeQueryChars(String s) 

Source Link

Document

See: <a href="https://www.google.com/?gws_rd=ssl#q=lucene+query+parser+syntax">Lucene query parser syntax</a> for more information on Escaping Special Characters

Usage

From source file:org.dspace.xoai.tests.unit.services.impl.AbstractQueryResolverTest.java

License:BSD License

protected String escapedFromDate(Date date) {
    return ClientUtils.escapeQueryChars(
            baseDateProvider.format(new DateBuilder(date).setMinMilliseconds().build()).replace("Z", ".000Z"));
}

From source file:org.dspace.xoai.tests.unit.services.impl.AbstractQueryResolverTest.java

License:BSD License

protected String escapedUntilDate(Date date) {
    return ClientUtils.escapeQueryChars(
            baseDateProvider.format(new DateBuilder(date).setMaxMilliseconds().build()).replace("Z", ".999Z"));
}

From source file:org.eclipse.orion.internal.server.search.Indexer.java

License:Open Source License

private boolean isModified(IFileStore file, IFileInfo fileInfo) {
    try {//from   w ww .j  a va2 s . c o m
        //if there is no match, then the file last modified doesn't match last index so assume it was modified
        StringBuffer qString = new StringBuffer(ProtocolConstants.KEY_ID);
        qString.append(':');
        qString.append(ClientUtils.escapeQueryChars(file.toURI().toString()));
        qString.append(" AND "); //$NON-NLS-1$
        qString.append(ProtocolConstants.KEY_LAST_MODIFIED);
        qString.append(':');
        qString.append(Long.toString(fileInfo.getLastModified()));
        SolrQuery query = new SolrQuery(qString.toString());
        query.setParam(CommonParams.FL, ProtocolConstants.KEY_ID);
        QueryResponse response = server.query(query);
        return response.getResults().getNumFound() == 0;
    } catch (SolrServerException e) {
        handleIndexingFailure(e);
        //attempt to re-index
        return true;
    }
}

From source file:org.gbif.common.search.builder.SuggestQueryStringBuilder.java

License:Apache License

/**
 * Creates a query string that matches terms by to the partial phrase query fields.
 * The method takes a query q with the form: "pum conc" and produces a query with the form, for input puma con:
 * "(canonical_name_auto:\"puma con\"^1000 OR canonical_name_auto:puma^1000) OR (canonical_name:puma^300 OR canonical_name:con^200)"
 *
 * @param q input query/*  w  ww.  ja v  a 2  s . co m*/
 * @return a string containing a valid Solr query
 */
private String buildStringQuery(String q) {
    String cleanQ = clearConsecutiveBlanks(q);
    String[] tokens = cleanQ.split("\\ ");
    List<String> query = new ArrayList<String>();
    String[] phraseQuery = new String[2];
    List<String> partialQuery = new ArrayList<String>();
    Integer partialBoost = PARTIAL_QUERY_BOOST;
    if (tokens.length > 1) {
        phraseQuery[0] = phraseQueryTemplate.replace(QUERY_PLACE_HOLDER, ClientUtils.escapeQueryChars(cleanQ));
        phraseQuery[1] = startPhraseQueryTemplate.replace(QUERY_PLACE_HOLDER,
                ClientUtils.escapeQueryChars(tokens[0]));
        query.add(toParenthesesQuery(PARAMS_OR_JOINER.join(phraseQuery)));
        for (String token : tokens) {
            partialQuery.add(toBoostedQuery(
                    queryTemplate.replace(QUERY_PLACE_HOLDER, ClientUtils.escapeQueryChars(token)),
                    partialBoost, false));
            if (partialBoost > PARTIAL_BOOST_DECREMENT) {
                partialBoost -= PARTIAL_BOOST_DECREMENT;
            }
        }
    } else {
        if (SolrConstants.DEFAULT_FILTER_QUERY.equals(cleanQ)) {
            query.add(toParenthesesQuery(startPhraseQueryTemplate.replace(QUERY_PLACE_HOLDER, cleanQ)));
            partialQuery.add(
                    toBoostedQuery(queryTemplate.replace(QUERY_PLACE_HOLDER, tokens[0]), partialBoost, false));
        } else {
            query.add(toParenthesesQuery(startPhraseQueryTemplate.replace(QUERY_PLACE_HOLDER,
                    ClientUtils.escapeQueryChars(cleanQ))));
            partialQuery.add(toBoostedQuery(
                    queryTemplate.replace(QUERY_PLACE_HOLDER, ClientUtils.escapeQueryChars(tokens[0])),
                    partialBoost, false));
        }

    }
    query.add(toParenthesesQuery(PARAMS_OR_JOINER.join(partialQuery)));
    return PARAMS_OR_JOINER.join(query);
}

From source file:org.kimios.kernel.controller.impl.SolrSearchController.java

License:Open Source License

@Deprecated
private SearchResponse advancedSearchIds(Session session, String xmlStream, DMEntity entity, String sortField,
        String sortDir) throws DataSourceException, ConfigException, IndexException, IOException,
        ParserConfigurationException, SAXException {
    SolrQuery indexQuery = new SolrQuery();

    ArrayList<String> aclFilterQueries = new ArrayList<String>();
    ArrayList<String> filterQueries = new ArrayList<String>();
    if (!getSecurityAgent().isAdmin(session.getUserName(), session.getUserSource())) {
        String aclQuery = QueryBuilder.buildAclQuery(session);
        aclFilterQueries.add(aclQuery);/*from w  w  w .jav  a  2 s .co  m*/
    }
    if (entity != null) {
        DMEntity entityLoaded = dmsFactoryInstantiator.getDmEntityFactory().getEntity(entity.getUid());
        String pathQuery = "DocumentParent:" + entityLoaded.getPath() + "/*";
        filterQueries.add(pathQuery);
    }
    //Parsing XML stream

    List<String> queries = new ArrayList<String>();
    org.w3c.dom.Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
            .parse(new java.io.ByteArrayInputStream(xmlStream.getBytes("UTF-8")));
    Element root = doc.getDocumentElement();
    NodeList childNodes = root.getChildNodes();
    for (int i = 0; i < childNodes.getLength(); i++) {
        Node node = childNodes.item(i);
        //Document name query
        if (node.getNodeName().equals("document-name")) {
            if (node.getTextContent() != null && !node.getTextContent().equals("")) {
                queries.add(QueryBuilder.documentNameQuery(node.getTextContent().toLowerCase()));
            }
        }
        //Document body query
        if (node.getNodeName().equals("text")) {
            if (node.getTextContent() != null && !node.getTextContent().equals("")) {
                String bodyQuery = ClientUtils.escapeQueryChars(node.getTextContent());
                queries.add("DocumentBody:" + bodyQuery);
            }
        }
        //Document uid query
        if (node.getNodeName().equals("document-uid")) {
            if (node.getTextContent() != null && !node.getTextContent().equals("")) {
                filterQueries.add("DocumentUid:" + node.getTextContent());
            }
        }
        //Document type query
        if (node.getNodeName().equals("document-type-uid")) {
            if (node.getTextContent() != null && !node.getTextContent().equals("")) {
                long dtUid = Long.parseLong(node.getTextContent());
                List<DocumentType> items = dmsFactoryInstantiator.getDocumentTypeFactory()
                        .getChildrenDocumentType(dtUid);
                List<DocumentType> documentTypeList = new ArrayList<DocumentType>(items);
                for (DocumentType it : items) {
                    documentTypeList.addAll(dmsFactoryInstantiator.getDocumentTypeFactory()
                            .getChildrenDocumentType(it.getUid()));
                }

                StringBuilder builder = new StringBuilder();

                builder.append("DocumentTypeUid:(" + dtUid + (documentTypeList.size() > 0 ? " OR " : ""));
                int idx = 1;
                for (DocumentType dtIt : documentTypeList) {
                    builder.append(dtIt.getUid());
                    idx++;
                    if (idx < documentTypeList.size()) {
                        builder.append(" OR ");
                    }
                }
                builder.append(")");
                filterQueries.add(builder.toString());
            }
        }

        //Meta data queries
        if (node.getNodeName().equals("meta-value")) {
            Meta meta = dmsFactoryInstantiator.getMetaFactory()
                    .getMeta(Long.parseLong(node.getAttributes().getNamedItem("uid").getTextContent()));
            if (meta != null) {
                if (meta.getMetaType() == MetaType.STRING) {
                    if (node.getTextContent() != null && !node.getTextContent().equals("")) {

                        String metaStringQuery = "MetaDataString_" + meta.getUid() + ":*"
                                + ClientUtils.escapeQueryChars(node.getTextContent()) + "*";
                        queries.add(metaStringQuery);
                    }
                }
                if (meta.getMetaType() == MetaType.NUMBER) {
                    Double min = null;
                    Double max = null;
                    boolean toAdd = false;
                    if (node.getAttributes().getNamedItem("number-from") != null
                            && !node.getAttributes().getNamedItem("number-from").getTextContent().equals("")) {
                        min = Double
                                .parseDouble(node.getAttributes().getNamedItem("number-from").getTextContent());
                        toAdd = true;
                    }
                    if (node.getAttributes().getNamedItem("number-to") != null
                            && !node.getAttributes().getNamedItem("number-to").getTextContent().equals("")) {
                        max = Double
                                .parseDouble(node.getAttributes().getNamedItem("number-to").getTextContent());
                        toAdd = true;
                    }
                    if (toAdd) {
                        String metaNumberQuery = "MetaDataNumber_" + meta.getUid() + ":["
                                + (min != null ? min : "*") + " TO " + (max != null ? max : "*") + "]";

                        queries.add(metaNumberQuery);
                    }
                }
                if (meta.getMetaType() == MetaType.DATE) {
                    Date min = null;
                    Date max = null;
                    boolean toAdd = false;
                    if (node.getAttributes().getNamedItem("date-from") != null
                            && !node.getAttributes().getNamedItem("date-from").getTextContent().equals("")) {

                        min = new Date(Long
                                .parseLong(node.getAttributes().getNamedItem("date-from").getTextContent()));
                        toAdd = true;
                    }
                    if (node.getAttributes().getNamedItem("date-to") != null
                            && !node.getAttributes().getNamedItem("date-to").getTextContent().equals("")) {

                        max = new Date(
                                Long.parseLong(node.getAttributes().getNamedItem("date-to").getTextContent()));
                        toAdd = true;
                    }
                    if (toAdd) {
                        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
                        df.setTimeZone(TimeZone.getTimeZone("UTC"));
                        String metaDateQuery = "MetaDataDate_" + meta.getUid() + ":["
                                + (min != null ? df.format(min) : "*") + " TO "
                                + (max != null ? df.format(max) : "*") + "]";
                        queries.add(metaDateQuery);
                    }
                }
                if (meta.getMetaType() == MetaType.BOOLEAN) {
                    if (node.getAttributes().getNamedItem("boolean-value") != null && !node.getAttributes()
                            .getNamedItem("boolean-value").getTextContent().equals("")) {

                        String metaBoolQuery = "MetaDataBoolean_" + meta.getUid() + ":" + Boolean.parseBoolean(
                                node.getAttributes().getNamedItem("boolean-value").getTextContent());
                        queries.add(metaBoolQuery);
                    }
                }
            }
        }
    }

    indexQuery.setFilterQueries(aclFilterQueries.toArray(new String[] {}));
    indexQuery.addSortField("score", SolrQuery.ORDER.desc);
    StringBuilder sQuery = new StringBuilder();
    for (String q : queries) {

        sQuery.append("+");
        sQuery.append(q);
        sQuery.append(" ");
    }

    if (queries.size() == 0) {
        /*
        Convert filter queries in query, to get result
         */
        for (String q : filterQueries) {

            sQuery.append("+");
            sQuery.append(q);
            sQuery.append(" ");
        }
    }

    log.debug("Solr Final Query: " + sQuery);

    indexQuery.setQuery(sQuery.toString());
    SearchResponse response = solrIndexManager.executeSolrQuery(indexQuery);
    return response;
}

From source file:org.kimios.kernel.controller.impl.SolrSearchController.java

License:Open Source License

private SolrQuery parseQueryFromListCriteria(Session session, int page, int pageSize,
        List<Criteria> criteriaList, String sortField, String sortDir) throws ParseException {

    SolrQuery indexQuery = new SolrQuery();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

    ArrayList<String> aclFilterQueries = new ArrayList<String>();
    ArrayList<String> filterQueries = new ArrayList<String>();
    ArrayList<String> queries = new ArrayList<String>();
    if (!getSecurityAgent().isAdmin(session.getUserName(), session.getUserSource())) {
        String aclQuery = QueryBuilder.buildAclQuery(session);
        aclFilterQueries.add(aclQuery);/*  w w w. j a  v a2  s.  co  m*/
    }
    for (Criteria c : criteriaList) {
        if (c.getQuery() != null && c.getQuery().trim().length() > 0 || c.getRangeMin() != null
                || c.getRangeMax() != null) {
            if (c.getFieldName().equals("DocumentName")) {
                queries.add(QueryBuilder.documentNameQuery(c.getQuery()));
            } else if (c.getFieldName().equals("DocumentBody")) {
                queries.add("DocumentBody:" + ClientUtils.escapeQueryChars(c.getQuery()));
            } else if (c.getFieldName().equals("DocumentUid")) {
                filterQueries.add("DocumentUid:" + c.getQuery());
            } else if (c.getFieldName().equals("DocumentParent")) {
                filterQueries.add(QueryBuilder.documentParentQuery(c.getQuery()));
            } else if (c.getFieldName().equals("DocumentVersionUpdateDate")) {
                queries.add(QueryBuilder.documentUpdateDateQuery("DocumentVersionUpdateDate", c.getRangeMin(),
                        c.getRangeMax()));
            } else if (c.getFieldName().equals("DocumentCreationDate")) {
                queries.add(QueryBuilder.documentUpdateDateQuery("DocumentCreationDate", c.getRangeMin(),
                        c.getRangeMax()));
            } else if (c.getFieldName().equals("DocumentTypeUid")) {
                long dtUid = Long.parseLong(c.getQuery());
                List<DocumentType> items = dmsFactoryInstantiator.getDocumentTypeFactory()
                        .getChildrenDocumentType(dtUid);
                List<DocumentType> documentTypeList = new ArrayList<DocumentType>(items);
                for (DocumentType it : items) {
                    documentTypeList.addAll(dmsFactoryInstantiator.getDocumentTypeFactory()
                            .getChildrenDocumentType(it.getUid()));
                }

                StringBuilder builder = new StringBuilder();

                builder.append("DocumentTypeUid:(" + dtUid + (documentTypeList.size() > 0 ? " OR " : ""));
                int idx = 0;
                for (DocumentType dtIt : documentTypeList) {
                    builder.append(dtIt.getUid());
                    idx++;
                    if (idx < documentTypeList.size()) {
                        builder.append(" OR ");
                    }
                }
                builder.append(")");
                filterQueries.add(builder.toString());
            } else if (c.getFieldName().startsWith("MetaData")) {
                Meta meta = dmsFactoryInstantiator.getMetaFactory().getMeta(c.getMetaId());
                if (meta != null) {
                    if (meta.getMetaType() == MetaType.STRING) {

                        String metaStringQuery = "MetaDataString_" + meta.getUid() + ":*"
                                + ClientUtils.escapeQueryChars(c.getQuery().toLowerCase()) + "*";
                        queries.add(metaStringQuery);
                    }
                    if (meta.getMetaType() == MetaType.NUMBER) {
                        Double min = null;
                        Double max = null;
                        boolean toAdd = false;
                        if (c.getRangeMin() != null && c.getRangeMin().trim().length() > 0) {
                            min = Double.parseDouble(c.getRangeMin());
                            toAdd = true;
                        }
                        if (c.getRangeMax() != null && c.getRangeMax().trim().length() > 0) {
                            max = Double.parseDouble(c.getRangeMax());
                            toAdd = true;
                        }
                        if (toAdd) {
                            String metaNumberQuery = "MetaDataNumber_" + meta.getUid() + ":["
                                    + (min != null ? min : "*") + " TO " + (max != null ? max : "*") + "]";

                            queries.add(metaNumberQuery);
                        }
                    }
                    if (meta.getMetaType() == MetaType.DATE) {
                        Date min = null;
                        Date max = null;
                        boolean toAdd = false;
                        if (c.getRangeMin() != null && c.getRangeMin().trim().length() > 0) {

                            try {
                                min = sdf.parse(c.getRangeMin());
                                toAdd = true;
                            } catch (Exception e) {
                                toAdd = false;
                            }
                        }
                        if (c.getRangeMax() != null && c.getRangeMax().trim().length() > 0) {
                            try {
                                max = sdf.parse(c.getRangeMax());
                                toAdd = true;
                            } catch (Exception e) {
                                toAdd = false;
                            }
                        }
                        if (toAdd) {
                            DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
                            df.setTimeZone(TimeZone.getTimeZone("UTC"));
                            String metaDateQuery = QueryBuilder.documentUpdateDateQuery(
                                    "MetaDataDate_" + meta.getUid(), c.getRangeMin(), c.getRangeMax());

                            queries.add(metaDateQuery);
                        }
                    }
                    if (meta.getMetaType() == MetaType.BOOLEAN) {
                        String metaBoolQuery = "MetaDataBoolean_" + meta.getUid() + ":"
                                + Boolean.parseBoolean(c.getQuery());
                        queries.add(metaBoolQuery);
                    }
                }
            }
        }
    }

    indexQuery.setFilterQueries(filterQueries.toArray(new String[] {}));
    if (sortField != null) {
        indexQuery.addSortField(sortField,
                sortDir != null ? SolrQuery.ORDER.valueOf(sortDir.toLowerCase()) : SolrQuery.ORDER.asc);
    }
    indexQuery.addSortField("score", SolrQuery.ORDER.desc);
    StringBuilder sQuery = new StringBuilder();

    for (String q : queries) {
        sQuery.append("+");
        sQuery.append(q);
        sQuery.append(" ");
    }

    if (queries.size() == 0) {
        /*
        Convert filter queries in query, to get result
         */
        for (String q : filterQueries) {
            sQuery.append("+");
            sQuery.append(q);
            sQuery.append(" ");
        }

    } else {
        filterQueries.addAll(aclFilterQueries);
        indexQuery.setFilterQueries(filterQueries.toArray(new String[] {}));

    }
    log.debug("Solr Final Query: " + sQuery);
    indexQuery.setQuery(sQuery.toString());
    if (pageSize > -1 && page > -1) {
        indexQuery.setRows(pageSize);
        indexQuery.setStart(page);
    } else {
        indexQuery.setRows(Integer.MAX_VALUE);
    }

    return indexQuery;

}

From source file:org.kimios.kernel.index.query.QueryBuilder.java

License:Open Source License

public static String buildAclQuery(Session session) {

    List<String> aclQueriesList = new ArrayList<String>();

    StringBuilder builder = new StringBuilder();

    /*/*www. java 2  s  .  c o m*/
    Owner Query
     */

    builder.append("+(DocumentOwner:");
    builder.append(session.getUserName());
    builder.append("@");
    builder.append(session.getUserSource());
    builder.append(" OR ");
    /*
    Build list of possible ACL
     */
    List<DMSecurityRule> rules = new ArrayList<DMSecurityRule>();
    rules.add(DMSecurityRule.getInstance(session.getUserName(), session.getUserSource(),
            SecurityEntityType.USER, DMSecurityRule.READRULE));
    rules.add(DMSecurityRule.getInstance(session.getUserName(), session.getUserSource(),
            SecurityEntityType.USER, DMSecurityRule.WRITERULE));
    rules.add(DMSecurityRule.getInstance(session.getUserName(), session.getUserSource(),
            SecurityEntityType.USER, DMSecurityRule.FULLRULE));

    for (Group g : session.getGroups()) {
        rules.add(DMSecurityRule.getInstance(g.getGid(), session.getUserSource(), SecurityEntityType.GROUP,
                DMSecurityRule.READRULE));
        rules.add(DMSecurityRule.getInstance(g.getGid(), session.getUserSource(), SecurityEntityType.GROUP,
                DMSecurityRule.WRITERULE));
        rules.add(DMSecurityRule.getInstance(g.getGid(), session.getUserSource(), SecurityEntityType.GROUP,
                DMSecurityRule.FULLRULE));
    }

    String or = " OR ";

    for (int u = 0; u < rules.size(); u++) {
        DMSecurityRule rule = rules.get(u);
        builder.append("DocumentACL:");
        builder.append(ClientUtils.escapeQueryChars(rule.getRuleHash()));
        if (u < (rules.size() - 1)) {
            builder.append(or);
        }
    }
    builder.append(") ");

    String bldNot = "-(DocumentACL:"
            + ClientUtils.escapeQueryChars(DMSecurityRule.getInstance(session.getUserName(),
                    session.getUserSource(), SecurityEntityType.USER, DMSecurityRule.NOACCESS).getRuleHash());
    bldNot += ")";

    builder.append(bldNot);

    log.debug("SOLR ACL Query: " + builder.toString());

    return builder.toString();
}

From source file:org.kimios.kernel.index.query.QueryBuilder.java

License:Open Source License

public static String documentNameQuery(String query) {

    String documentNameQuery = "";
    boolean fileExtSearch = query.toLowerCase().contains(".");
    if (fileExtSearch) {
        String docName = null;/*  w  w w.j a va  2 s.  c  o m*/
        String extension = null;
        extension = query.toLowerCase().substring(query.indexOf(".") + 1);
        docName = query.toLowerCase().substring(0, query.indexOf("."));
        documentNameQuery = "DocumentName:*" + ClientUtils.escapeQueryChars(docName.toLowerCase()) + "*";
        documentNameQuery += " AND DocumentExtension:" + ClientUtils.escapeQueryChars(extension) + "*";
    } else {
        documentNameQuery = "DocumentName:*" + ClientUtils.escapeQueryChars(query.toLowerCase()) + "*";
    }

    log.debug("SOLR DocumentName Query: " + documentNameQuery);
    return documentNameQuery;
}

From source file:org.kimios.kernel.index.query.QueryBuilder.java

License:Open Source License

public static String documentParentQuery(String query) {
    String documentPathQuery = "DocumentParent:" + ClientUtils.escapeQueryChars(query) + "/*";
    log.debug("SOLR DocumentParent Query: " + documentPathQuery);
    return documentPathQuery;
}

From source file:org.lareferencia.xoai.filter.LRSetSpecFilter.java

License:BSD License

@Override
public SolrFilterResult buildSolrQuery() {
    if (setSpec.startsWith("col_")) {
        try {/*  w w  w  .  jav  a  2  s .c  o m*/
            return new SolrFilterResult("item.collections:" + ClientUtils.escapeQueryChars(setSpec));
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    } else if (setSpec.startsWith("com_")) {
        try {
            return new SolrFilterResult("item.communities:" + ClientUtils.escapeQueryChars(setSpec));
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    } else { // sin prefijo se mapea contra item.collections
        return new SolrFilterResult("item.collections:" + ClientUtils.escapeQueryChars(setSpec));
    }

    return new SolrFilterResult();
}