List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery
BooleanQuery
From source file:com.gitblit.LuceneExecutor.java
License:Apache License
/** * Searches the specified repositories for the given text or query * //from w w w .ja va2s. c o m * @param text * if the text is null or empty, null is returned * @param page * the page number to retrieve. page is 1-indexed. * @param pageSize * the number of elements to return for this page * @param repositories * a list of repositories to search. if no repositories are * specified null is returned. * @return a list of SearchResults in order from highest to the lowest score * */ public List<SearchResult> search(String text, int page, int pageSize, String... repositories) { if (StringUtils.isEmpty(text)) { return null; } if (ArrayUtils.isEmpty(repositories)) { return null; } Set<SearchResult> results = new LinkedHashSet<SearchResult>(); StandardAnalyzer analyzer = new StandardAnalyzer(LUCENE_VERSION); try { // default search checks summary and content BooleanQuery query = new BooleanQuery(); QueryParser qp; qp = new QueryParser(LUCENE_VERSION, FIELD_SUMMARY, analyzer); qp.setAllowLeadingWildcard(true); query.add(qp.parse(text), Occur.SHOULD); qp = new QueryParser(LUCENE_VERSION, FIELD_CONTENT, analyzer); qp.setAllowLeadingWildcard(true); query.add(qp.parse(text), Occur.SHOULD); IndexSearcher searcher; if (repositories.length == 1) { // single repository search searcher = getIndexSearcher(repositories[0]); } else { // multiple repository search List<IndexReader> readers = new ArrayList<IndexReader>(); for (String repository : repositories) { IndexSearcher repositoryIndex = getIndexSearcher(repository); readers.add(repositoryIndex.getIndexReader()); } IndexReader[] rdrs = readers.toArray(new IndexReader[readers.size()]); MultiSourceReader reader = new MultiSourceReader(rdrs); searcher = new IndexSearcher(reader); } Query rewrittenQuery = searcher.rewrite(query); logger.debug(rewrittenQuery.toString()); TopScoreDocCollector collector = TopScoreDocCollector.create(5000, true); searcher.search(rewrittenQuery, collector); int offset = Math.max(0, (page - 1) * pageSize); ScoreDoc[] hits = collector.topDocs(offset, pageSize).scoreDocs; int totalHits = collector.getTotalHits(); for (int i = 0; i < hits.length; i++) { int docId = hits[i].doc; Document doc = searcher.doc(docId); SearchResult result = createSearchResult(doc, hits[i].score, offset + i + 1, totalHits); if (repositories.length == 1) { // single repository search result.repository = repositories[0]; } else { // multi-repository search MultiSourceReader reader = (MultiSourceReader) searcher.getIndexReader(); int index = reader.getSourceIndex(docId); result.repository = repositories[index]; } String content = doc.get(FIELD_CONTENT); result.fragment = getHighlightedFragment(analyzer, query, content, result); results.add(result); } } catch (Exception e) { logger.error(MessageFormat.format("Exception while searching for {0}", text), e); } return new ArrayList<SearchResult>(results); }
From source file:com.github.jiloc.USTweetsAnalyzer.Analyzer_Index.java
/** * search for all documents that has state * @param state/* w ww . ja va2s. c o m*/ * @throws IOException */ public void load(String state) throws IOException { state_term = new Term(state_field, state); q_term = new TermQuery(state_term); boolq = new BooleanQuery(); boolq.add(q_term, BooleanClause.Occur.MUST); tokenDocuments = new HashMap<String, HashSet<Document>>(); top = searcher.search(boolq, MAX_RETRIEVED); hits = top.scoreDocs; mSC = buildingMSCG(); // minSetC=new HashSet<HashSet<String>>(); //buildingMinSetCovG(buildStateUniverse()); //printMSC(); }
From source file:com.github.rnewson.couchdb.lucene.Utils.java
License:Apache License
public static Query docQuery(final String viewname, final String id) { BooleanQuery q = new BooleanQuery(); q.add(new TermQuery(new Term(Config.VIEW, viewname)), Occur.MUST); q.add(new TermQuery(new Term(Config.ID, id)), Occur.MUST); return q;//from w ww . j a v a 2 s. c om }
From source file:com.github.tteofili.apacheconeu14.oak.search.nls.NLSQueryIndex.java
License:Apache License
@Override public Cursor query(Filter filter, NodeState nodeState) { Thread thread = Thread.currentThread(); ClassLoader loader = thread.getContextClassLoader(); thread.setContextClassLoader(Client.class.getClassLoader()); try {// ww w.j ava2 s .c o m final IndexSearcher searcher = IndexUtils.getSearcher(); if (searcher != null) { Filter.PropertyRestriction nativeQueryRestriction = filter.getPropertyRestriction(NATIVE_NLS_QUERY); String nativeQueryString = String .valueOf(nativeQueryRestriction.first.getValue(nativeQueryRestriction.first.getType())); // build the parse tree of the query and filter the uninteresting part (e.g. "who is the admin" -> "admin") String purgedQuery = pcfg.filterQuestion(nativeQueryString); BooleanQuery booleanClauses = new BooleanQuery(); // add clauses for the purged natural language query (if existing) if (purgedQuery != null) { booleanClauses.add(new BooleanClause(new TermQuery(new Term("jcr:title", purgedQuery)), BooleanClause.Occur.SHOULD)); booleanClauses.add(new BooleanClause(new TermQuery(new Term("jcr:description", purgedQuery)), BooleanClause.Occur.SHOULD)); booleanClauses.add(new BooleanClause(new TermQuery(new Term("text", purgedQuery)), BooleanClause.Occur.SHOULD)); } // infer "class" of the query and boost based on that try { initializeClassifier(searcher); ClassificationResult<BytesRef> result = null; try { result = classifier.assignClass(nativeQueryString); } catch (Exception e) { // do nothing } if (result != null) { booleanClauses.add(new BooleanClause(new BoostedQuery( new TermQuery(new Term("jcr:primaryType", result.getAssignedClass())), new ConstValueSource(2.0f)), BooleanClause.Occur.SHOULD)); } final TopDocs topDocs = searcher.search(booleanClauses, 100); final ScoreDoc[] scoreDocs = topDocs.scoreDocs; return new Cursor() { private int index = 0; @Override public IndexRow next() { final ScoreDoc scoreDoc = scoreDocs[index]; index++; return new IndexRow() { @Override public String getPath() { try { return searcher.doc(scoreDoc.doc).get("path"); } catch (IOException e) { return null; } } @Override public PropertyValue getValue(String s) { try { if ("jcr:score".equals(s)) { PropertyValues.newString(String.valueOf(scoreDoc.score)); } return PropertyValues.newString(searcher.doc(scoreDoc.doc).get(s)); } catch (IOException e) { return null; } } }; } @Override public boolean hasNext() { return index < scoreDocs.length; } @Override public void remove() { } }; } catch (IOException e) { // do nothing } } } finally { thread.setContextClassLoader(loader); } return null; }
From source file:com.globalsight.ling.lucene.TbFuzzyIndex.java
License:Apache License
protected Query getQuery(String p_text) throws IOException { BooleanQuery result = new BooleanQuery(); if (AnalyzerFactory.TOKENIZE_3GRAM == m_tokenize) { m_analyzer = AnalyzerFactory.getInstance(getLocale(), m_tokenize); }//from ww w. j a va2s. c o m TokenStream tokens = m_analyzer.tokenStream(IndexDocument.TEXT, new StringReader(p_text)); tokens.reset(); Token t; while ((t = LuceneUtil.getNextToken(tokens)) != null) { result.add(new BooleanClause(new TermQuery(new Term(IndexDocument.TEXT, t.toString())), Occur.SHOULD)); } return result; }
From source file:com.globalsight.ling.lucene.TmFuzzyIndex.java
License:Apache License
protected Query getQuery(String p_text) throws IOException { BooleanQuery result = new BooleanQuery(); TokenStream tokens = m_analyzer.tokenStream(IndexDocument.TEXT, new StringReader(p_text)); tokens.reset();//from w w w . j a v a 2s . co m Token t; while ((t = LuceneUtil.getNextToken(tokens)) != null) { result.add(new BooleanClause(new TermQuery(new Term(IndexDocument.TEXT, t.toString())), Occur.SHOULD)); } return result; }
From source file:com.google.gerrit.lucene.QueryBuilder.java
License:Apache License
private Query or(Predicate<ChangeData> p) throws QueryParseException { try {/*from www . j a va 2s .c o m*/ BooleanQuery q = new BooleanQuery(); for (int i = 0; i < p.getChildCount(); i++) { q.add(toQuery(p.getChild(i)), SHOULD); } return q; } catch (BooleanQuery.TooManyClauses e) { throw new QueryParseException("cannot create query for index: " + p, e); } }
From source file:com.google.gerrit.lucene.QueryBuilder.java
License:Apache License
private Query and(Predicate<ChangeData> p) throws QueryParseException { try {//from w w w .j a v a 2s. c o m BooleanQuery b = new BooleanQuery(); List<Query> not = Lists.newArrayListWithCapacity(p.getChildCount()); for (int i = 0; i < p.getChildCount(); i++) { Predicate<ChangeData> c = p.getChild(i); if (c instanceof NotPredicate) { Predicate<ChangeData> n = c.getChild(0); if (n instanceof TimestampRangePredicate) { b.add(notTimestamp((TimestampRangePredicate<ChangeData>) n), MUST); } else { not.add(toQuery(n)); } } else { b.add(toQuery(c), MUST); } } for (Query q : not) { b.add(q, MUST_NOT); } return b; } catch (BooleanQuery.TooManyClauses e) { throw new QueryParseException("cannot create query for index: " + p, e); } }
From source file:com.google.gerrit.lucene.QueryBuilder.java
License:Apache License
private Query not(Predicate<ChangeData> p) throws QueryParseException { Predicate<ChangeData> n = p.getChild(0); if (n instanceof TimestampRangePredicate) { return notTimestamp((TimestampRangePredicate<ChangeData>) n); }//from w ww . j av a 2 s . c om // Lucene does not support negation, start with all and subtract. BooleanQuery q = new BooleanQuery(); q.add(new MatchAllDocsQuery(), MUST); q.add(toQuery(n), MUST_NOT); return q; }
From source file:com.google.gerrit.server.change.ReviewerSuggestionCache.java
License:Apache License
List<AccountInfo> search(String query, int n) throws IOException { IndexSearcher searcher = get();// w w w . j a va 2s .co m if (searcher == null) { return Collections.emptyList(); } List<String> segments = Splitter.on(' ').omitEmptyStrings().splitToList(query.toLowerCase()); BooleanQuery q = new BooleanQuery(); for (String field : ALL) { BooleanQuery and = new BooleanQuery(); for (String s : segments) { and.add(new PrefixQuery(new Term(field, s)), Occur.MUST); } q.add(and, Occur.SHOULD); } TopDocs results = searcher.search(q, n); ScoreDoc[] hits = results.scoreDocs; List<AccountInfo> result = new LinkedList<>(); for (ScoreDoc h : hits) { Document doc = searcher.doc(h.doc); IndexableField idField = checkNotNull(doc.getField(ID)); AccountInfo info = new AccountInfo(idField.numericValue().intValue()); info.name = doc.get(NAME); info.email = doc.get(EMAIL); info.username = doc.get(USERNAME); result.add(info); } return result; }