List of usage examples for org.apache.solr.search SolrIndexSearcher getCore
public SolrCore getCore()
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; }