Example usage for org.apache.lucene.search BooleanQuery BooleanQuery

List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanQuery BooleanQuery.

Prototype

BooleanQuery

Source Link

Usage

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;
}