Example usage for org.apache.solr.search SolrIndexSearcher getCore

List of usage examples for org.apache.solr.search SolrIndexSearcher getCore

Introduction

In this page you can find the example usage for org.apache.solr.search SolrIndexSearcher getCore.

Prototype

public SolrCore getCore() 

Source Link

Usage

From source file:com.searchbox.SuggesterTreeHolder.java

License:Apache License

SuggestionResultSet getSuggestions(SolrIndexSearcher searcher, String[] fields, String query,
        int maxPhraseSearch) {
    query = deAccent(query);/*from ww w .  ja  v  a2  s  .c o  m*/
    String[] queryTokens = query.replaceAll("[^A-Za-z0-9 ]", " ").replace("  ", " ").trim().split(" "); // TODO should use
    // tokensizer..
    SuggestionResultSet rs = headNode.computeQt(queryTokens[queryTokens.length - 1].toLowerCase(),
            maxPhraseSearch); // get completion for the first word in the
                                                                                                                             // suggestion

    // didn't find it, bail early
    if (rs == null) {
        return new SuggestionResultSet("", 0);
    }

    rs.myval = "";
    LOGGER.debug("Doing 2nd part of equation");
    try {

        if (queryTokens.length > 1) {

            // Solr 4.4 method change
            QueryParser parser = new QueryParser(Version.LUCENE_44, "contents",
                    searcher.getCore().getLatestSchema().getAnalyzer());
            // QueryParser parser = new QueryParser(Version.LUCENE_43,
            // "contents", searcher.getCore().getSchema().getAnalyzer());

            SuggestionResultSet newrs = new SuggestionResultSet("", maxPhraseSearch);
            StringBuilder sb = new StringBuilder();
            // build a search in all of the target fields
            for (int zz = 0; zz < queryTokens.length - 1; zz++) {
                newrs.myval = newrs.myval + queryTokens[zz] + " ";
                StringBuilder inner = new StringBuilder();
                for (String field : fields) {
                    String escaped_field = parser.escape(field);
                    // looking for the query token
                    String escaped_token = parser.escape(queryTokens[zz]);
                    inner.append(escaped_field + ":" + escaped_token + " ");
                }
                if (inner.length() > 0) {
                    sb.append("+(" + inner + ")");
                }
            }

            // LOGGER.info("SB query:\t" + sb.toString());
            Query q = null;
            try {
                // convert it to a solr query
                q = parser.parse(sb.toString());
                // LOGGER.info("BQ1 query:\t" + q.toString());
            } catch (Exception e) {
                e.printStackTrace();
                LOGGER.error("Error parsing query:\t" + sb.toString());
            }
            DocSet qd = searcher.getDocSet(q);
            // LOGGER.info("Number of docs in set\t" + qd.size());

            for (SuggestionResult sr : rs.suggestions) {
                // for each of the possible suggestions, see how prevelant
                // they are in the document set so that we can know their
                // likelihood of being correct
                sb = new StringBuilder();
                // should use tokensizer
                String[] suggestionTokens = sr.suggestion.split(" ");

                for (int zz = 0; zz < suggestionTokens.length; zz++) {
                    StringBuilder inner = new StringBuilder();
                    for (String field : fields) {
                        inner.append(field + ":" + suggestionTokens[zz] + " ");
                    }
                    if (inner.length() > 0) {
                        sb.append("+(" + inner + ")");
                    }
                }

                // prevent zero bump down
                double Q_c = .0000001;

                try {
                    // LOGGER.info("BQ2 query String:\t" + sb.toString());
                    q = parser.parse(sb.toString());
                    // LOGGER.info("BQ2 query query:\t" + q.toString());
                } catch (Exception e) {
                    // LOGGER.error("parser fail?");
                }

                DocSet pd = searcher.getDocSet(q);

                // LOGGER.info("Number of docs in phrase set\t" +
                // pd.size());
                if (pd.size() != 0) {
                    // As per equation (13) from paper
                    Q_c += qd.intersection(pd).size() / (pd.size() * 1.0);
                }
                // LOGGER.info("Number of docs in phrase set----- Q_c\t (" +
                // Q_c + ") * (" + sr.probability + ")");
                newrs.add(sr.suggestion, sr.probability * Q_c);
            }
            rs = newrs;
        }
    } catch (IOException ex) {
        LOGGER.error(ex.getMessage());
    }
    return rs;
}

From source file:com.searchbox.SuggeterDataStructureBuilder.java

License:Apache License

SuggeterDataStructureBuilder(SolrIndexSearcher searcher, String[] fields, int ngrams, int minDocFreq,
        int minTermFreq, int maxNumDocs, String nonpruneFileName, List<String> stopWords) {
    NGRAMS = ngrams;//from   ww  w. j  av  a2s  . com
    counts = new int[NGRAMS];
    suggester = new SuggesterTreeHolder(NGRAMS, nonpruneFileName);
    // Solr 4.4 method change
    analyzer = searcher.getCore().getLatestSchema().getAnalyzer();
    // analyzer= searcher.getCore().getSchema().getAnalyzer();
    this.stopwords = new HashSet<String>(stopWords);
    this.fields = fields;
    init();
    iterateThroughDocuments(searcher, fields, maxNumDocs);
    computeNormalizers(minDocFreq, minTermFreq);
}

From source file:org.apache.lucene.search.suggest.hovland.ContextAwarePhraseSuggester.java

License:Apache License

public SuggestionResultSet getSuggestions(SolrIndexSearcher searcher, String[] fields, String query,
        int maxPhraseSearch) {
    query = deAccent(query);//from   www. java 2  s. c  o m
    /*String[] queryTokens = query.replaceAll("[^A-Za-z0-9 ]", " ")
    .replace("  ", " ").trim().split(" "); */
    String[] queryTokens = SuggesterAnalyzer.analyze(SuggesterAnalyzer.getQueryAnalizer(), query);
    String endToken = queryTokens[queryTokens.length - 1].toLowerCase();
    LOGGER.debug("Building suggestions for: " + endToken);
    SuggestionResultSet rs = headNode.computeQt(endToken, maxPhraseSearch); // get completion for the last word in the
                                                                            // suggestion
                                                                            // didn't find it, bail early
    if (rs == null) {
        LOGGER.debug("Didn't find anyting for: " + endToken);
        return new SuggestionResultSet("", 0);
    }
    LOGGER.debug(rs.toString());

    rs.value = "";
    LOGGER.debug("Doing 2nd part of equation");
    try {

        if (queryTokens.length > 1) {

            QueryParser parser = new QueryParser("contents",
                    searcher.getCore().getLatestSchema().getQueryAnalyzer());
            SuggestionResultSet newRs = new SuggestionResultSet("", maxPhraseSearch);
            StringBuilder sb = new StringBuilder();
            // build a search in all of the target fields
            for (int zz = 0; zz < queryTokens.length - 1; zz++) {
                newRs.value = newRs.value + queryTokens[zz] + " ";
                StringBuilder inner = new StringBuilder();

                for (String field : fields) {
                    String escaped_field = parser.escape(field);
                    // looking for the query token
                    String escaped_token = parser.escape(queryTokens[zz]);
                    inner.append(escaped_field + ":" + escaped_token + " ");
                }
                if (inner.length() > 0) {
                    sb.append("+(" + inner + ")");
                }
            }

            LOGGER.debug("SB query:\t" + sb.toString());
            Query q = null;
            try {
                // convert it to a solr query
                q = parser.parse(sb.toString());
                LOGGER.debug("BQ1 query:\t" + q.toString());
            } catch (Exception e) {
                e.printStackTrace();
                LOGGER.error("Error parsing query:\t" + sb.toString());
            }
            DocSet qd = searcher.getDocSet(q);
            LOGGER.debug("Number of docs in set\t" + qd.size());
            int numOfSuggestions = 0;
            for (SuggestionResultSet.SuggestionResult sr : rs.suggestions) {
                // for each of the possible suggestions, see how prevalent
                // they are in the document set so that we can know their
                // likelihood of being correct
                sb = new StringBuilder();
                // should use tokensizer
                String[] suggestionTokens = sr.suggestion.split(" ");

                for (int zz = 0; zz < suggestionTokens.length; zz++) {
                    StringBuilder inner = new StringBuilder();
                    for (String field : fields) {
                        inner.append(field + ":" + suggestionTokens[zz] + " ");
                    }
                    if (inner.length() > 0) {
                        sb.append("+(" + inner + ")");
                    }
                }

                // prevent zero bump down
                double Q_c = .0000001;

                try {
                    LOGGER.debug("BQ2 query String:\t" + sb.toString());
                    q = parser.parse(sb.toString());
                    LOGGER.debug("BQ2 query query:\t" + q.toString());
                } catch (Exception e) {
                    // LOGGER.error("parser fail?");
                }

                DocSet pd = searcher.getDocSet(q);

                LOGGER.debug("Number of docs in phrase set\t" + pd.size());
                if (pd.size() != 0) {
                    // As per equation (13) from paper
                    Q_c += qd.intersection(pd).size() / (pd.size() * 1.0);
                }
                LOGGER.debug("Q_c = (" + Q_c + ") * (" + sr.probability + ")");
                LOGGER.debug("Adding: {" + sr.suggestion + ", " + (sr.probability * Q_c));
                newRs.add(sr.suggestion, sr.probability * Q_c);
            }
            rs = newRs;
            LOGGER.debug("Final suggestions. " + rs.toString());
        }
    } catch (IOException ex) {
        LOGGER.error(ex.getMessage());
    }
    return rs;
}