Example usage for org.apache.solr.client.solrj SolrQuery setQuery

List of usage examples for org.apache.solr.client.solrj SolrQuery setQuery

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery setQuery.

Prototype

public SolrQuery setQuery(String query) 

Source Link

Usage

From source file:it.isti.cnr.hpc.europeana.hackthon.api.Suggestion.java

License:Apache License

public List<String> getSuggestion(String query) {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(query);
    // sets the number of results
    solrQuery.setRows(20);/*from w  w w  . j av a  2s.  c  om*/
    solrQuery.setFilterQueries("freq:[15 TO *]");
    QueryResponse rsp = null;
    try {
        rsp = server.query(solrQuery);
    } catch (SolrServerException e) {
        logger.error("The suggestion server can not reply {}", e.toString());
        // e.printStackTrace();
        return null;
    } catch (Exception e) {
        logger.error("Problem producing the suggestions " + e.toString());
        return null;
    }
    SolrDocumentList docs = rsp.getResults();
    List<String> suggestions = new ArrayList<String>();
    for (SolrDocument d : docs) {
        String value = (String) d.getFieldValue("sem_label");
        value = value.replaceAll("%28.*%29", " ");
        suggestions.add(value);
    }
    return suggestions;
}

From source file:it.polimi.chansonnier.test.AddPipelineTest.java

License:Open Source License

public void testSongsAreIndexedInSolr() throws Exception {
    InputStream heroFlv = Fixtures.class.getResourceAsStream("hero.flv");
    Id[] result = fixtureManager.addSong("http://www.youtube.com/watch?v=owTmJrtD7g8", heroFlv,
            "Enrique Iglesias- Hero (with lyrics)");
    assertEquals(1, result.length);//  w  w w.ja v a2 s. c o m
    InputStream haloFlv = Fixtures.class.getResourceAsStream("halo.flv");
    result = fixtureManager.addSong("http://www.youtube.com/watch?v=fSdgBse1o7Q", haloFlv,
            "Beyonce-Halo Lyrics");
    assertEquals(1, result.length);
    Thread.sleep(15000);

    SolrQuery query = new SolrQuery();
    query.setQuery("title:Hero");
    QueryResponse rsp = solrServer.query(query);
    SolrDocumentList docList = rsp.getResults();
    assertEquals(1, docList.size());
    SolrDocument song = docList.get(0);
    assertEquals("http://www.youtube.com/watch?v=owTmJrtD7g8", song.get("link"));
    assertEquals("Enrique Iglesias", song.get("artist"));
    assertEquals("Hero", song.get("title"));
    assertTrue(((String) song.get("lyrics")).contains("if I asked you to dance"));
    assertEquals("anger", song.get("emotion"));
    assertTrue(((Float) song.get("emotionConfidence")) > 0.01);
    assertEquals("en", song.get("language"));
    assertTrue(((Float) song.get("languageConfidence")) > 0.2);
    Collection attachmentNames = song.getFieldValues("image");
    assertEquals(3, attachmentNames.size());

    String heroLink = "http://www.youtube.com/watch?v=owTmJrtD7g8";
    assertQueryGivesOnlyThisResult("fullText:Hero", heroLink);
    assertQueryGivesOnlyThisResult("fullText:Enrique", heroLink);
    assertQueryGivesOnlyThisResult("fullText:Iglesias", heroLink);
    assertQueryGivesOnlyThisResult("fullText:\"Enrique Iglesias\"", heroLink);
    assertQueryGivesOnlyThisResult("fullText:\"Would you dance\"", heroLink);
    assertQueryGivesOnlyThisResult("fullText:\"IF I ASKED YOU\"", heroLink);

    query = new SolrQuery();
    query.setQuery("title:Halo");
    rsp = solrServer.query(query);
    docList = rsp.getResults();
    assertEquals(1, docList.size());
    song = docList.get(0);
    assertEquals("http://www.youtube.com/watch?v=fSdgBse1o7Q", song.get("link"));
    assertEquals("Beyonce", song.get("artist"));
    assertEquals("Halo", song.get("title"));
    assertEquals("surprise", song.get("emotion"));
    assertEquals("en", song.get("language"));
    assertTrue(((String) song.get("lyrics")).contains("Remember those walls I built?"));
    attachmentNames = song.getFieldValues("image");
    assertEquals(3, attachmentNames.size());
}

From source file:it.polimi.chansonnier.test.AddPipelineTest.java

License:Open Source License

private void assertQueryGivesOnlyThisResult(String queryText, String expectedLinkField)
        throws SolrServerException {
    SolrQuery query = new SolrQuery();
    query.setQuery(queryText);
    QueryResponse rsp = solrServer.query(query);
    SolrDocumentList docList = rsp.getResults();
    assertEquals(1, docList.size());/*from   w  ww.ja v  a  2s .  c om*/
    SolrDocument song = docList.get(0);
    assertEquals(expectedLinkField, song.get("link"));

}

From source file:it.polimi.chansonnier.test.AddSongTest.java

License:Open Source License

private SolrDocumentList searchForSongs(String queryString) throws Exception {
    String url = "http://localhost:8983/solr";
    CommonsHttpSolrServer server = new CommonsHttpSolrServer(url);
    server.setParser(new XMLResponseParser());
    SolrQuery query = new SolrQuery();
    query.setQuery(queryString);
    QueryResponse rsp = server.query(query);
    return rsp.getResults();
}

From source file:jp.aegif.nemaki.cmis.aspect.query.solr.SolrPredicateWalker.java

License:Open Source License

/**
 * Get all subfolder ids by connecting to Solr recursively
 *
 * @param folderId/*from  w  ww .j a v  a2s .  co  m*/
 * @param solrServer
 * @return
 */
private List<String> getDescendantFolderId(String folderId, SolrServer solrServer) {
    List<String> list = new ArrayList<String>();

    list.add(folderId); // Add oneself to the list in advance

    SolrQuery query = new SolrQuery();

    query.setQuery(solrUtil.getPropertyNameInSolr(repositoryId, PropertyIds.PARENT_ID) + ":" + folderId
            + " AND " + solrUtil.getPropertyNameInSolr(repositoryId, PropertyIds.BASE_TYPE_ID)
            + ":cmis\\:folder"); // only "folder" nodes

    // Connect to SolrServer and add subfolder ids to the list
    try {
        QueryResponse resp = solrServer.query(query);
        SolrDocumentList children = resp.getResults();
        // END NODE case: Do nothing but return oneself
        if (children.getNumFound() == 0) {
            return list;
            // Other than END NODE case: collect descendants values
            // recursively
        } else {
            Iterator<SolrDocument> iterator = resp.getResults().iterator();
            while (iterator.hasNext()) {
                SolrDocument child = iterator.next();
                String childId = (String) child.getFieldValue("id");
                // Recursive call to this method
                List<String> l = getDescendantFolderId(childId, solrServer);
                list.addAll(l);
            }
            return list;
        }
    } catch (SolrServerException e) {
        e.printStackTrace();
        return null;
    }
}

From source file:jp.aegif.nemaki.cmis.aspect.query.solr.SolrQueryProcessor.java

License:Open Source License

@Override
public ObjectList query(CallContext callContext, String repositoryId, String statement,
        Boolean searchAllVersions, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
        String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {

    SolrServer solrServer = solrUtil.getSolrServer();
    // replacing backslashed for TIMESTAMP only
    Pattern time_p = Pattern.compile("(TIMESTAMP\\s?'[\\-\\d]*T\\d{2})\\\\:(\\d{2})\\\\:([\\.\\d]*Z')",
            Pattern.CASE_INSENSITIVE);
    Matcher time_m = time_p.matcher(statement);
    statement = time_m.replaceAll("$1:$2:$3");

    // TODO walker is required?

    QueryUtilStrict util = new QueryUtilStrict(statement, new CmisTypeManager(repositoryId, typeManager), null);
    QueryObject queryObject = util.getQueryObject();
    // Get where caluse as Tree
    Tree whereTree = null;/*  w  ww  . java  2 s .c o  m*/
    try {
        util.processStatement();
        Tree tree = util.parseStatement();
        whereTree = extractWhereTree(tree);
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Build solr statement of WHERE
    String whereQueryString = "";
    if (whereTree == null || whereTree.isNil()) {
        whereQueryString = "*:*";
    } else {
        try {
            SolrPredicateWalker solrPredicateWalker = new SolrPredicateWalker(repositoryId, queryObject,
                    solrUtil, contentService);
            Query whereQuery = solrPredicateWalker.walkPredicate(whereTree);
            whereQueryString = whereQuery.toString();
        } catch (Exception e) {
            e.printStackTrace();
            // TODO Output more detailed exception
            exceptionService.invalidArgument("Invalid CMIS SQL statement!");
        }
    }

    // Build solr query of FROM
    String fromQueryString = "";

    String repositoryQuery = "repository_id:" + repositoryId;

    fromQueryString += repositoryQuery + " AND ";
    TypeDefinition td = null;

    td = queryObject.getMainFromName();

    // includedInSupertypeQuery
    List<TypeDefinitionContainer> typeDescendants = typeManager.getTypesDescendants(repositoryId, td.getId(),
            BigInteger.valueOf(-1), false);
    Iterator<TypeDefinitionContainer> iterator = typeDescendants.iterator();
    List<String> tables = new ArrayList<String>();
    while (iterator.hasNext()) {
        TypeDefinition descendant = iterator.next().getTypeDefinition();
        if (td.getId() != descendant.getId()) {
            boolean isq = (descendant.isIncludedInSupertypeQuery() == null) ? false
                    : descendant.isIncludedInSupertypeQuery();
            if (!isq)
                continue;
        }
        String table = descendant.getQueryName();
        tables.add(table.replaceAll(":", "\\\\:"));
    }

    //      Term t = new Term(
    //            solrUtil.getPropertyNameInSolr(PropertyIds.OBJECT_TYPE_ID),
    //            StringUtils.join(tables, " "));
    //      fromQueryString += new TermQuery(t).toString();
    fromQueryString += "(" + solrUtil.getPropertyNameInSolr(repositoryId, PropertyIds.OBJECT_TYPE_ID) + ":"
            + StringUtils.join(tables,
                    " " + solrUtil.getPropertyNameInSolr(repositoryId, PropertyIds.OBJECT_TYPE_ID) + ":")
            + ")";

    // Execute query
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(whereQueryString);
    solrQuery.setFilterQueries(fromQueryString);

    logger.info(solrQuery.toString());
    logger.info("statement: " + statement);
    logger.info("skipCount: " + skipCount);
    logger.info("maxItems: " + maxItems);
    if (skipCount == null) {
        solrQuery.set(CommonParams.START, 0);
    } else {
        solrQuery.set(CommonParams.START, skipCount.intValue());
    }
    if (maxItems == null) {
        solrQuery.set(CommonParams.ROWS, 50);
    } else {
        solrQuery.set(CommonParams.ROWS, maxItems.intValue());
    }

    QueryResponse resp = null;
    try {
        resp = solrServer.query(solrQuery);
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

    long numFound = 0;
    // Output search results to ObjectList
    if (resp != null && resp.getResults() != null && resp.getResults().getNumFound() != 0) {
        SolrDocumentList docs = resp.getResults();
        numFound = docs.getNumFound();

        List<Content> contents = new ArrayList<Content>();
        for (SolrDocument doc : docs) {
            String docId = (String) doc.getFieldValue("object_id");
            Content c = contentService.getContent(repositoryId, docId);

            // When for some reason the content is missed, pass through
            if (c == null) {
                logger.warn("[objectId=" + docId + "]It is missed in DB but still rests in Solr.");
            } else {
                contents.add(c);
            }

        }

        List<Lock> locks = threadLockService.readLocks(repositoryId, contents);
        try {
            threadLockService.bulkLock(locks);

            // Filter out by permissions
            List<Content> permitted = permissionService.getFiltered(callContext, repositoryId, contents);

            // Filter return value with SELECT clause
            Map<String, String> requestedWithAliasKey = queryObject.getRequestedPropertiesByAlias();
            String filter = null;
            if (!requestedWithAliasKey.keySet().contains("*")) {
                // Create filter(queryNames) from query aliases
                filter = StringUtils.join(requestedWithAliasKey.values(), ",");
            }

            // Build ObjectList
            String orderBy = orderBy(queryObject);
            ObjectList result = compileService.compileObjectDataListForSearchResult(callContext, repositoryId,
                    permitted, filter, includeAllowableActions, includeRelationships, renditionFilter, false,
                    maxItems, skipCount, false, orderBy, numFound);

            return result;

        } finally {
            threadLockService.bulkUnlock(locks);
        }
    } else {
        ObjectListImpl nullList = new ObjectListImpl();
        nullList.setHasMoreItems(false);
        nullList.setNumItems(BigInteger.ZERO);
        return nullList;
    }
}

From source file:jp.aegif.nemaki.query.solr.SolrPredicateWalker.java

License:Open Source License

/**
 * Get all subfolder ids by connecting to Solr recursively
 *
 * @param folderId/*w  w w. ja va  2 s .  c  o m*/
 * @param solrServer
 * @return
 */
private List<String> getDescendantFolderId(String folderId, SolrServer solrServer) {
    List<String> list = new ArrayList<String>();

    list.add(folderId); // Add oneself to the list in advance

    SolrQuery query = new SolrQuery();

    query.setQuery(solrUtil.getPropertyNameInSolr(PropertyIds.PARENT_ID) + ":" + folderId + " AND "
            + solrUtil.getPropertyNameInSolr(PropertyIds.BASE_TYPE_ID) + ":cmis\\:folder"); // only "folder" nodes

    // Connect to SolrServer and add subfolder ids to the list
    try {
        QueryResponse resp = solrServer.query(query);
        SolrDocumentList children = resp.getResults();
        // END NODE case: Do nothing but return oneself
        if (children.getNumFound() == 0) {
            return list;
            // Other than END NODE case: collect descendants values
            // recursively
        } else {
            Iterator<SolrDocument> iterator = resp.getResults().iterator();
            while (iterator.hasNext()) {
                SolrDocument child = iterator.next();
                String childId = (String) child.getFieldValue("id");
                // Recursive call to this method
                List<String> l = getDescendantFolderId(childId, solrServer);
                list.addAll(l);
            }
            return list;
        }
    } catch (SolrServerException e) {
        e.printStackTrace();
        return null;
    }
}

From source file:jp.aegif.nemaki.query.solr.SolrQueryProcessor.java

License:Open Source License

@Override
public ObjectList query(TypeManager typeManager, CallContext callContext, String username, String id,
        String statement, Boolean searchAllVersions, Boolean includeAllowableActions,
        IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems,
        BigInteger skipCount) {/*w ww .  ja  v  a  2s  .c  o  m*/

    SolrServer solrServer = solrUtil.getSolrServer();

    // queryObject includes the SQL information
    QueryObject queryObject = new QueryObject(typeManager);
    QueryUtil util = new QueryUtil();
    CmisQueryWalker walker = null;

    // If statement is invalid, trhow exception
    walker = util.traverseStatementAndCatchExc(statement, queryObject, null);
    // "WHERE" clause to Lucene query
    String whereQueryString = "";
    Tree whereTree = walker.getWherePredicateTree();
    if (whereTree == null || whereTree.isNil()) {
        whereQueryString = "*:*";
    } else {
        SolrPredicateWalker solrPredicateWalker = new SolrPredicateWalker(queryObject, solrUtil,
                contentService);
        try {
            Query whereQuery = solrPredicateWalker.walkPredicate(whereTree);
            whereQueryString = whereQuery.toString();
        } catch (Exception e) {
            e.printStackTrace();
            // TODO Output more detailed exception
            exceptionService.invalidArgument("Invalid CMIS SQL statement!");
        }
    }

    // "FROM" clause to Lucene query
    String fromQueryString = "";

    TypeDefinition td = queryObject.getMainFromName();
    // includedInSupertypeQuery
    List<TypeDefinitionContainer> typeDescendants = typeManager.getTypesDescendants(td.getId(),
            BigInteger.valueOf(-1), false);
    Iterator<TypeDefinitionContainer> iterator = typeDescendants.iterator();
    List<String> tables = new ArrayList<String>();
    while (iterator.hasNext()) {
        TypeDefinition descendant = iterator.next().getTypeDefinition();
        if (td.getId() != descendant.getId()) {
            boolean isq = (descendant.isIncludedInSupertypeQuery() == null) ? false
                    : descendant.isIncludedInSupertypeQuery();
            if (!isq)
                continue;
        }
        String table = descendant.getQueryName();
        tables.add(table.replaceAll(":", "\\\\:"));
    }
    Term t = new Term(solrUtil.getPropertyNameInSolr(PropertyIds.OBJECT_TYPE_ID),
            StringUtils.join(tables, " "));
    fromQueryString = new TermQuery(t).toString();

    // Execute query
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(whereQueryString);
    solrQuery.setFilterQueries(fromQueryString);

    QueryResponse resp = null;
    try {
        resp = solrServer.query(solrQuery);
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

    // Output search results to ObjectList
    if (resp != null && resp.getResults() != null && resp.getResults().getNumFound() != 0) {
        SolrDocumentList docs = resp.getResults();

        List<Content> contents = new ArrayList<Content>();
        for (SolrDocument doc : docs) {
            String docId = (String) doc.getFieldValue("id");
            Content c = contentService.getContent(docId);

            //When for some reason the content is missed, pass through
            if (c == null) {
                logger.warn("[objectId=" + docId + "]It is missed in DB but still rests in Solr.");
            } else {
                contents.add(c);
            }

        }

        // Filter out by permissions
        List<Content> permitted = permissionService.getFiltered(callContext, contents);

        // Filter return value with SELECT clause
        Map<String, String> m = queryObject.getRequestedPropertiesByAlias();
        Map<String, String> aliases = new HashMap<String, String>();
        for (String alias : m.keySet()) {
            aliases.put(m.get(alias), alias);
        }

        String filter = null;
        if (!aliases.keySet().contains("*")) {
            filter = StringUtils.join(aliases.keySet(), ",");
        }

        //Build ObjectList
        ObjectList result = compileObjectService.compileObjectDataList(callContext, permitted, filter,
                includeAllowableActions, includeRelationships, null, true, maxItems, skipCount, false, aliases);

        //Sort
        List<SortSpec> sortSpecs = queryObject.getOrderBys();
        List<String> _orderBy = new ArrayList<String>();
        for (SortSpec sortSpec : sortSpecs) {
            List<String> _sortSpec = new ArrayList<String>();
            _sortSpec.add(sortSpec.getSelector().getName());
            if (!sortSpec.isAscending()) {
                _sortSpec.add("DESC");
            }

            _orderBy.add(StringUtils.join(_sortSpec, " "));
        }
        String orderBy = StringUtils.join(_orderBy, ",");
        sortUtil.sort(result.getObjects(), orderBy);

        return result;
    } else {
        ObjectListImpl nullList = new ObjectListImpl();
        nullList.setHasMoreItems(false);
        nullList.setNumItems(BigInteger.ZERO);
        return nullList;
    }
}

From source file:jp.aegif.nemaki.tracker.CoreTracker.java

License:Open Source License

/**
 * Get the last change token stored in Solr
 *
 * @return/*from   www  .  j  a  v a 2  s . c o m*/
 */
private String readLatestChangeToken(String repositoryId) {
    logger.info("Start readLatest : {}", repositoryId);
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(Constant.FIELD_REPOSITORY_ID + ":" + repositoryId);

    QueryResponse resp = null;
    try {
        resp = tokenServer.query(solrQuery);
    } catch (SolrServerException e) {
        logger.error("Read latest ChangeToken query failed : {} ", solrQuery, e);
    }

    String latestChangeToken = "";
    if (resp != null && resp.getResults() != null && resp.getResults().getNumFound() != 0) {
        SolrDocument doc = resp.getResults().get(0);
        latestChangeToken = (String) doc.get(Constant.FIELD_TOKEN);
    } else {
        logger.info("No latest change token found for repository: {}", repositoryId);
        logger.info("Set blank latest change token for repository: {}", repositoryId);
        storeLatestChangeToken("", repositoryId);
    }
    return latestChangeToken;
}

From source file:kbSRU.kbSRU.java

License:Open Source License

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType(XML_RESPONSE_HEADER); // Talkback happens in XML form.
    response.setCharacterEncoding("UTF-8"); // Unicode++
    request.setCharacterEncoding("UTF-8");

    PrintWriter out = null; // The talkback buffer.

    // handle startrecord 
    Integer startRecord = 0;/*from ww  w .  j a v  a 2s.  c  o  m*/

    if (!(request.getParameter("startRecord") == null)) {
        try {
            startRecord = Integer.parseInt(request.getParameter("startRecord")) - 1;
        } catch (NumberFormatException e) {
            startRecord = 0;
        }
    }

    // maximumrecords
    Integer maximumRecords = Integer.parseInt(this.config.getProperty("default_maximumRecords"));
    if (!(request.getParameter("maximumRecords") == null)) {
        maximumRecords = Integer.parseInt(request.getParameter("maximumRecords"));
    }

    // operation 
    String operation = request.getParameter("operation");

    // x_collection
    String x_collection = request.getParameter("x-collection");
    if (x_collection == null)
        x_collection = this.config.getProperty("default_x_collection");
    if (x_collection == null)
        operation = null;

    // sortkeys
    String sortKeys = request.getParameter("sortKeys");

    // sortorder
    String sortOrder = request.getParameter("sortOrder");

    // recordschema 
    String recordSchema = request.getParameter("recordSchema");
    if (recordSchema == null)
        recordSchema = "dc";

    if (recordSchema.equalsIgnoreCase("dcx")) {
        recordSchema = "dcx";
    }

    if (recordSchema.equalsIgnoreCase("solr")) {
        recordSchema = "solr";
    }

    // query request 
    String query = request.getParameter("query");
    String q = request.getParameter("q");

    // who is requestor ?
    String remote_ip = request.getHeader("X-FORWARDED-FOR");

    if (remote_ip == null) {
        remote_ip = request.getRemoteAddr().trim();
    } else {
        remote_ip = request.getHeader("X-FORWARDED-FOR");
    }

    // handle debug 
    Boolean debug = Boolean.parseBoolean(request.getParameter("debug"));
    if (!debug) {
        out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true);
    }

    // handle query
    if ((query == null) && (q != null)) {
        query = q;
    } else {
        if ((query != null) && (q == null)) {
            q = query;
        } else {
            operation = null;
        }
    }

    // handle operation
    if (operation == null) {
        if (query != null) {
            operation = "searchRetrieve";
        } else {
            operation = "explain";
        }
    }

    //  searchRetrieve 
    if (operation.equalsIgnoreCase("searchRetrieve")) {
        if (query == null) {
            operation = "explain";
            log.debug(operation + ":" + query);
        }
    }

    // start talking back.
    String[] sq = { "" };
    String solrquery = "";

    // facet

    String facet = null;
    List<FacetField> fct = null;

    if (request.getParameter("facet") != null) {
        facet = request.getParameter("facet");
        log.debug("facet : " + facet);
    }

    if (operation == null) {
        operation = "searchretrieve";
    } else { // explain response
        if (operation.equalsIgnoreCase("explain")) {
            log.debug("operation = explain");
            out.write("<srw:explainResponse xmlns:srw=\"http://www.loc.gov/zing/srw/\">");
            out.write("</srw:explainResponse>");
        } else { // DEBUG routine
            operation = "searchretrieve";

            String triplequery = null;

            if (query.matches(".*?\\[.+?\\].*?")) { // New symantic syntax
                triplequery = symantic_query(query);
                query = query.split("\\[")[0] + " " + triplequery;
                log.fatal(triplequery);

                solrquery = CQLtoLucene.translate(query, log, config);
            } else {
                solrquery = CQLtoLucene.translate(query, log, config);
            }
            log.debug(solrquery);

            if (debug == true) {
                response.setContentType(HTML_RESPONSE_HEADER);
                out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true);
                out.write("<html><body>\n\n");
                out.write("'" + remote_ip + "'<br>\n");
                out.write("<form action='http://www.kbresearch.nl/kbSRU'>");
                out.write("<input type=text name=q value='" + query + "' size=120>");
                out.write("<input type=hidden name=debug value=True>");
                out.write("<input type=submit>");
                out.write("<table border=1><tr><td>");
                out.write("q</td><td>" + query + "</td></tr><tr>");
                out.write("<td>query out</td><td>" + URLDecoder.decode(solrquery) + "</td></tr>");
                out.write("<tr><td>SOLR_URL</td><td> <a href='"
                        + this.config.getProperty("collection." + x_collection.toLowerCase() + ".solr_baseurl")
                        + "/?q=" + solrquery + "'>"
                        + this.config.getProperty("collection." + x_collection.toLowerCase() + ".solr_baseurl")
                        + "/select/?q=" + solrquery + "</a><br>" + this.config.getProperty("solr_url")
                        + solrquery + "</td></tr>");
                out.write("<b>SOLR_QUERY</b> : <BR> <iframe width=900 height=400 src='"
                        + this.config.getProperty("collection." + x_collection.toLowerCase() + ".solr_baseurl")
                        + "/../?q=" + solrquery + "'></iframe><BR>");
                out.write("<b>SRU_QUERY</b> : <BR> <a href=" + this.config.getProperty("baseurl") + "?q="
                        + query + "'>" + this.config.getProperty("baseurl") + "?q=" + query
                        + "</a><br><iframe width=901 height=400 src='http://www.kbresearch.nl/kbSRU/?q=" + query
                        + "'></iframe><BR>");
                out.write("<br><b>JSRU_QUERY</b> : <BR><a href='http://jsru.kb.nl/sru/?query=" + query
                        + "&x-collection=" + x_collection + "'>http://jsru.kb.nl/sru/?query=" + query
                        + "&x-collection=GGC</a><br><iframe width=900 height=400 src='http://jsru.kb.nl/sru/?query="
                        + query + "&x-collection=GGC'></iframe>");

            } else { // XML SearchRetrieve response
                String url = this.config
                        .getProperty("collection." + x_collection.toLowerCase() + ".solr_baseurl");
                String buffer = "";
                CommonsHttpSolrServer server = null;
                server = new CommonsHttpSolrServer(url);
                log.fatal("URSING " + url);
                server.setParser(new XMLResponseParser());
                int numfound = 0;
                try {
                    SolrQuery do_query = new SolrQuery();
                    do_query.setQuery(solrquery);
                    do_query.setRows(maximumRecords);
                    do_query.setStart(startRecord);

                    if ((sortKeys != null) && (sortKeys.length() > 1)) {
                        if (sortOrder != null) {
                            if (sortOrder.equals("asc")) {
                                do_query.setSortField(sortKeys, SolrQuery.ORDER.asc);
                            }
                            if (sortOrder.equals("desc")) {
                                do_query.setSortField(sortKeys, SolrQuery.ORDER.desc);
                            }
                        } else {
                            for (String str : sortKeys.trim().split(",")) {
                                str = str.trim();
                                if (str.length() > 1) {
                                    if (str.equals("date")) {
                                        do_query.setSortField("date_date", SolrQuery.ORDER.desc);
                                        log.debug("SORTORDERDEBUG | DATE! " + str + " | ");
                                        break;
                                    } else {
                                        do_query.setSortField(str + "_str", SolrQuery.ORDER.asc);
                                        log.debug("SORTORDERDEBUG | " + str + " | ");
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    if (facet != null) {
                        if (facet.indexOf(",") > 1) {
                            for (String str : facet.split(",")) {
                                if (str.indexOf("date") > 1) {
                                    do_query.addFacetField(str);
                                } else {
                                    do_query.addFacetField(str);
                                }
                                //do_query.setParam("facet.method", "enum");
                            }
                            //q.setFacetSort(false); 
                        } else {
                            do_query.addFacetField(facet);
                        }
                        do_query.setFacet(true);
                        do_query.setFacetMinCount(1);
                        do_query.setFacetLimit(-1);
                    }

                    log.fatal(solrquery);

                    QueryResponse rsp = null;
                    boolean do_err = false;
                    boolean do_sugg = false;
                    SolrDocumentList sdl = null;
                    String diag = "";
                    StringBuffer suggest = new StringBuffer("");

                    String content = "1";

                    SolrQuery spellq = do_query;
                    try {
                        rsp = server.query(do_query);
                    } catch (SolrServerException e) {
                        String header = this.SRW_HEADER.replaceAll("\\$numberOfRecords", "0");
                        out.write(header);
                        diag = this.SRW_DIAG.replaceAll("\\$error", e.getMessage());
                        do_err = true;
                        rsp = null;
                    }

                    log.fatal("query done..");
                    if (!(do_err)) { // XML dc response

                        SolrDocumentList docs = rsp.getResults();
                        numfound = (int) docs.getNumFound();
                        int count = startRecord;
                        String header = this.SRW_HEADER.replaceAll("\\$numberOfRecords",
                                Integer.toString(numfound));
                        out.write(header);
                        out.write("<srw:records>");

                        Iterator<SolrDocument> iter = rsp.getResults().iterator();

                        while (iter.hasNext()) {
                            count += 1;
                            if (recordSchema.equalsIgnoreCase("dc")) {
                                SolrDocument resultDoc = iter.next();
                                content = (String) resultDoc.getFieldValue("id");
                                out.write("<srw:record>");
                                out.write("<srw:recordPacking>xml</srw:recordPacking>");
                                out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>");
                                out.write(
                                        "<srw:recordData xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/loc.terms/relators/OTH\" xmlns:facets=\"info:srw/extension/4/facets\" >");
                                StringBuffer result = new StringBuffer("");

                                construct_lucene_dc(result, resultDoc);

                                out.write(result.toString());
                                out.write("</srw:recordData>");
                                out.write("<srw:recordPosition>" + Integer.toString(count)
                                        + "</srw:recordPosition>");
                                out.write("</srw:record>");
                            }

                            if (recordSchema.equalsIgnoreCase("solr")) {
                                SolrDocument resultDoc = iter.next();
                                content = (String) resultDoc.getFieldValue("id");
                                out.write("<srw:record>");
                                out.write("<srw:recordPacking>xml</srw:recordPacking>");
                                out.write("<srw:recordSchema>info:srw/schema/1/solr</srw:recordSchema>");
                                out.write("<srw:recordData xmlns:expand=\"http://www.kbresearch.nl/expand\">");
                                StringBuffer result = new StringBuffer("");
                                construct_lucene_solr(result, resultDoc);
                                out.write(result.toString());

                                out.write("</srw:recordData>");
                                out.write("<srw:recordPosition>" + Integer.toString(count)
                                        + "</srw:recordPosition>");
                                out.write("</srw:record>");
                            }

                            if (recordSchema.equalsIgnoreCase("dcx")) { // XML dcx response
                                out.write("<srw:record>");
                                out.write("<srw:recordPacking>xml</srw:recordPacking>");
                                out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>");
                                out.write(
                                        "<srw:recordData><srw_dc:dc xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/marc.relators/\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >");
                                SolrDocument resultDoc = iter.next();
                                content = (String) resultDoc.getFieldValue("id");

                                String dcx_data = helpers.getOAIdcx(
                                        "http://services.kb.nl/mdo/oai?verb=GetRecord&identifier=" + content,
                                        log);
                                if (x_collection.equalsIgnoreCase("ggc-thes")) {
                                    dcx_data = helpers.getOAIdcx(
                                            "http://serviceso.kb.nl/mdo/oai?verb=GetRecord&identifier="
                                                    + content,
                                            log);
                                }

                                if (!(dcx_data.length() == 0)) {
                                    out.write(dcx_data);
                                } else {
                                    // Should not do this!!

                                    out.write("<srw:record>");
                                    out.write("<srw:recordPacking>xml</srw:recordPacking>");
                                    out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>");
                                    out.write(
                                            "<srw:recordData xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/loc.terms/relators/OTH\" >");
                                    StringBuffer result = new StringBuffer("");

                                    construct_lucene_dc(result, resultDoc);

                                    out.write(result.toString());
                                    out.write("</srw:recordData>");
                                    out.write("<srw:recordPosition>" + Integer.toString(count)
                                            + "</srw:recordPosition>");
                                    out.write("</srw:record>");

                                }

                                out.write("</srw_dc:dc>");

                                StringBuffer expand_data;
                                boolean expand = false;

                                if (content.startsWith("GGC-THES:AC:")) {
                                    String tmp_content = "";
                                    tmp_content = content.replaceFirst("GGC-THES:AC:", "");
                                    log.fatal("calling get");
                                    expand_data = new StringBuffer(
                                            helpers.getExpand("http://www.kbresearch.nl/general/lod_new/get/"
                                                    + tmp_content + "?format=rdf", log));
                                    log.fatal("get finini");

                                    if (expand_data.toString().length() > 4) {

                                        out.write(
                                                "<srw_dc:expand xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >");
                                        out.write(expand_data.toString());
                                        expand = true;
                                    }
                                } else {
                                    expand_data = new StringBuffer(helpers
                                            .getExpand("http://www.kbresearch.nl/ANP.cgi?q=" + content, log));
                                    if (expand_data.toString().length() > 0) {
                                        if (!expand) {
                                            out.write(
                                                    "<srw_dc:expand xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >");
                                            expand = true;
                                        }
                                        out.write(expand_data.toString());
                                    }
                                }
                                if (expand) {
                                    out.write("</srw_dc:expand>");
                                }

                                out.write("</srw:recordData>");
                                out.write("<srw:recordPosition>" + Integer.toString(count)
                                        + "</srw:recordPosition>");
                                out.write("</srw:record>");
                            }
                        }
                    }

                    if ((do_err) || (numfound == 0)) {
                        log.fatal("I haz suggestions");

                        try {
                            spellq.setParam("spellcheck", true);
                            spellq.setQueryType("/spell");
                            server = new CommonsHttpSolrServer(url);
                            rsp = server.query(spellq);
                            sdl = rsp.getResults();
                            SpellCheckResponse spell;
                            spell = rsp.getSpellCheckResponse();
                            List<SpellCheckResponse.Suggestion> suggestions = spell.getSuggestions();
                            if (suggestions.isEmpty() == false) {
                                suggest.append("<srw:extraResponseData>");
                                suggest.append("<suggestions>");

                                for (SpellCheckResponse.Suggestion sugg : suggestions) {
                                    suggest.append("<suggestionfor>" + sugg.getToken() + "</suggestionfor>");
                                    for (String item : sugg.getSuggestions()) {
                                        suggest.append("<suggestion>" + item + "</suggestion>");
                                    }
                                    suggest.append("</suggestions>");
                                    suggest.append("</srw:extraResponseData>");
                                }
                                do_sugg = true;
                            }
                        } catch (Exception e) {
                            rsp = null;
                            //log.fatal(e.toString());
                        }
                        ;
                    }
                    ;

                    if (!do_err) {
                        if (facet != null) {

                            try {
                                fct = rsp.getFacetFields();
                                out.write("<srw:facets>");

                                for (String str : facet.split(",")) {
                                    out.write("<srw:facet>");
                                    out.write("<srw:facetType>");
                                    out.write(str);
                                    out.write("</srw:facetType>");

                                    for (FacetField f : fct) {
                                        log.debug(f.getName());
                                        //if (f.getName().equals(str+"_str") || (f.getName().equals(str+"_date")) ) {
                                        List<FacetField.Count> facetEnties = f.getValues();
                                        for (FacetField.Count fcount : facetEnties) {
                                            out.write("<srw:facetValue>");
                                            out.write("<srw:valueString>");
                                            out.write(helpers.xmlEncode(fcount.getName()));
                                            out.write("</srw:valueString>");
                                            out.write("<srw:count>");
                                            out.write(Double.toString(fcount.getCount()));
                                            out.write("</srw:count>");
                                            out.write("</srw:facetValue>");
                                            //   }
                                        }

                                    }
                                    out.write("</srw:facet>");
                                }
                                out.write("</srw:facets>");
                                startRecord += 1;
                            } catch (Exception e) {
                            }

                            //log.fatal(e.toString()); }
                        }
                    } else {
                        out.write(diag);
                    }
                    out.write("</srw:records>"); // SearchRetrieve response footer
                    String footer = this.SRW_FOOTER.replaceAll("\\$query", helpers.xmlEncode(query));
                    footer = footer.replaceAll("\\$startRecord", (startRecord).toString());
                    footer = footer.replaceAll("\\$maximumRecords", maximumRecords.toString());
                    footer = footer.replaceAll("\\$recordSchema", recordSchema);
                    if (do_sugg) {
                        out.write(suggest.toString());
                    }
                    out.write(footer);
                } catch (MalformedURLException e) {
                    out.write(e.getMessage());
                } catch (IOException e) {
                    out.write("TO ERR is Human");
                }
            }
        }
    }
    out.close();
}