Example usage for org.apache.lucene.search IndexSearcher getIndexReader

List of usage examples for org.apache.lucene.search IndexSearcher getIndexReader

Introduction

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

Prototype

public IndexReader getIndexReader() 

Source Link

Document

Return the IndexReader this searches.

Usage

From source file:org.jahia.services.search.facets.SimpleJahiaJcrFacets.java

License:Open Source License

/**
 * Returns a list of terms in the specified field along with the corresponding count of documents in the set that match that constraint.
 * This method uses the FilterCache to get the intersection count between <code>docs</code> and the DocSet for each term in the filter.
 * //  w  ww .  j  av a2s.com
 * @see FacetParams#FACET_LIMIT
 * @see FacetParams#FACET_ZEROS
 * @see FacetParams#FACET_MISSING
 */
public NamedList<Object> getFacetTermEnumCounts(IndexSearcher searcher, OpenBitSet docs, String field,
        String fieldName, int offset, int limit, int mincount, boolean missing, String sort, String prefix,
        String locale, ExtendedPropertyDefinition epd) throws IOException {

    /*
     * :TODO: potential optimization... cache the Terms with the highest docFreq and try them first don't enum if we get our max from
     * them
     */

    // Minimum term docFreq in order to use the filterCache for that term.
    int minDfFilterCache = params.getFieldInt(field, FacetParams.FACET_ENUM_CACHE_MINDF, 0);

    IndexReader r = searcher.getIndexReader();
    FieldType ft = getType(epd);

    final int maxsize = limit >= 0 ? offset + limit : Integer.MAX_VALUE - 1;
    final TreeSet<SimpleFacets.CountPair<String, Integer>> queue = (sort.equals("count") || sort.equals("true"))
            ? new TreeSet<SimpleFacets.CountPair<String, Integer>>()
            : null;
    final NamedList<Object> res = new NamedList<Object>();

    int min = mincount - 1; // the smallest value in the top 'N' values
    int off = offset;
    int lim = limit >= 0 ? limit : Integer.MAX_VALUE;

    String startTerm = prefix == null ? "" : ft.toInternal(prefix);
    TermEnum te = r.terms(new Term(fieldName, startTerm));
    TermDocs td = r.termDocs();
    SolrIndexSearcher.TermDocsState tdState = new SolrIndexSearcher.TermDocsState();
    tdState.tenum = te;
    tdState.tdocs = td;

    if (docs.size() >= mincount) {
        do {
            Term t = te.term();

            if (null == t || !t.field().equals(fieldName))
                break;

            if (prefix != null && !t.text().startsWith(prefix))
                break;

            int df = te.docFreq();

            // If we are sorting, we can use df>min (rather than >=) since we
            // are going in index order. For certain term distributions this can
            // make a large difference (for example, many terms with df=1).
            if (df > 0 && df > min) {
                int c;

                if (df >= minDfFilterCache) {
                    // use the filter cache
                    // TODO: use the new method ???                        
                    //                        docs.intersectionSize( searcher.getPositiveDocSet(new TermQuery(t), tdState) );
                    c = (int) OpenBitSet.intersectionCount(getDocIdSet(new TermQuery(t), locale), docs);
                } else {
                    // iterate over TermDocs to calculate the intersection
                    td.seek(te);
                    c = 0;
                    while (td.next()) {
                        int doc = td.doc();
                        if (locale != null) {
                            doc = getMainDocIdForTranslations(
                                    searcher.getIndexReader().document(doc, PARENT_AND_TRANSLATION_FIELDS),
                                    locale);
                        }

                        if (docs.fastGet(doc)) {
                            c++;
                        }
                    }
                }

                if (sort.equals("count") || sort.equals("true")) {
                    if (c > min) {
                        queue.add(new SimpleFacets.CountPair<String, Integer>(t.text(), c));
                        if (queue.size() >= maxsize) {
                            break;
                        }
                    }
                } else {
                    if (c >= mincount && --off < 0) {
                        if (--lim < 0)
                            break;
                        res.add(ft.indexedToReadable(t.text()), c);
                    }
                }
            }
        } while (te.next());
    }

    if (sort.equals("count") || sort.equals("true")) {
        for (SimpleFacets.CountPair<String, Integer> p : queue) {
            if (--off >= 0)
                continue;
            if (--lim < 0)
                break;
            res.add(ft.indexedToReadable(p.key), p.val);
        }
    }

    if (missing) {
        res.add(null, getFieldMissingCount(searcher, docs, fieldName, locale));
    }

    te.close();
    td.close();

    return res;
}

From source file:org.jhlabs.scany.engine.search.LuceneSearcher.java

License:Open Source License

public static RecordList search(SearchModel searchModel, RecordExtractor recordExtractor)
        throws QueryBuilderException, RecordKeyException, IOException, ParseException {
    IndexSearcher indexSearcher = null;

    try {//from   w  w  w  . ja  v  a 2  s .c  o  m
        Directory directory = searchModel.getRelation().openDirectory();
        indexSearcher = new IndexSearcher(directory);

        Analyzer analyzer;

        if (searchModel.getRelation().getPerFieldAnalyzer() != null)
            analyzer = searchModel.getRelation().getPerFieldAnalyzer();
        else
            analyzer = searchModel.getRelation().getAnalyzer();

        LuceneQueryBuilder queryBuilder = new LuceneQueryBuilder();
        queryBuilder.addQuery(searchModel.getFilterAttributeList());
        queryBuilder.addQuery(searchModel.getParsedQueryText(), searchModel.getQueryAttributeList(), analyzer);

        Query query = queryBuilder.build();
        query = indexSearcher.rewrite(query);

        List<SortAttribute> sortAttributeList = searchModel.getSortAttributeList();
        Sort sort = null;

        if (sortAttributeList != null && sortAttributeList.size() > 0)
            sort = SearchModelUtils.makeSort(searchModel.getSortAttributeList());

        ScoreDoc[] docs = null;

        if (sort == null) {
            TopDocs topDocs = indexSearcher.search(query, searchModel.getHitsPerPage());
            docs = topDocs.scoreDocs;
            searchModel.setTotalRecords(topDocs.totalHits);
        } else {
            TopFieldDocs topFieldDocs = indexSearcher.search(query, searchModel.getHitsPerPage(), sort);
            docs = topFieldDocs.scoreDocs;
            searchModel.setTotalRecords(topFieldDocs.totalHits);
        }

        recordExtractor.extract(indexSearcher.getIndexReader(), docs);

        return recordExtractor.getRecordList();

    } finally {
        try {
            if (indexSearcher != null)
                indexSearcher.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
}

From source file:org.kie.kieora.backend.lucene.setups.BaseLuceneSetup.java

License:Apache License

@Override
public void deleteIfExists(final String... docIds) {
    final IndexSearcher searcher = nrtSearcher();
    try {//from w w w .j  a  v  a2s  . co  m
        final int[] answers = lookupDocIdByPK(searcher, docIds);
        for (final int docId : answers) {
            if (docId != -1) {
                writer().tryDeleteDocument(searcher.getIndexReader(), docId);
            }
        }
    } catch (Exception ex) {
    } finally {
        nrtRelease(searcher);
    }
}

From source file:org.kie.kieora.backend.lucene.setups.BaseLuceneSetup.java

License:Apache License

@Override
public void rename(final String sourceId, final String targetId) {
    final IndexSearcher searcher = nrtSearcher();
    try {//  w  ww.ja v  a2 s  .com
        int docId = lookupDocIdByPK(searcher, sourceId)[0];
        final Document source = searcher.getIndexReader().document(docId);

        source.removeField("id");
        source.add(new StringField("id", targetId, Field.Store.YES));

        indexDocument(sourceId, source);
    } catch (IOException ex) {
    } finally {
        nrtRelease(searcher);
    }
}

From source file:org.kie.kieora.backend.lucene.setups.BaseLuceneSetup.java

License:Apache License

protected int[] lookupDocIdByPK(final IndexSearcher searcher, final String... ids) throws IOException {
    final List<AtomicReaderContext> subReaders = searcher.getIndexReader().leaves();
    final TermsEnum[] termsEnums = new TermsEnum[subReaders.size()];
    final DocsEnum[] docsEnums = new DocsEnum[subReaders.size()];
    for (int subIDX = 0; subIDX < subReaders.size(); subIDX++) {
        termsEnums[subIDX] = subReaders.get(subIDX).reader().fields().terms("id").iterator(null);
    }//from  w  w  w. j ava 2  s.  co  m

    int[] results = new int[ids.length];

    for (int i = 0; i < results.length; i++) {
        results[i] = -1;
    }

    for (int idx = 0; idx < ids.length; idx++) {
        int base = 0;
        final BytesRef id = new BytesRef(ids[idx]);
        for (int subIDX = 0; subIDX < subReaders.size(); subIDX++) {
            final AtomicReader sub = subReaders.get(subIDX).reader();
            final TermsEnum termsEnum = termsEnums[subIDX];
            if (termsEnum.seekExact(id, false)) {
                final DocsEnum docs = docsEnums[subIDX] = termsEnum.docs(sub.getLiveDocs(), docsEnums[subIDX],
                        0);
                if (docs != null) {
                    final int docID = docs.nextDoc();
                    if (docID != DocIdSetIterator.NO_MORE_DOCS) {
                        results[idx] = base + docID;
                        break;
                    }
                }
            }
            base += sub.maxDoc();
        }
    }

    return results;
}

From source file:org.kie.kieora.backend.lucene.setups.DirectoryLuceneSetup.java

License:Apache License

@Override
public void nrtRelease(final IndexSearcher searcher) {
    try {//from  ww w.ja v  a 2s .  c  om
        searcher.getIndexReader().close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

From source file:org.kie.uberfire.metadata.backend.lucene.index.BaseLuceneIndex.java

License:Apache License

@Override
public boolean deleteIfExists(final String... docIds) {
    boolean deletedSomething = false;
    final IndexSearcher searcher = nrtSearcher();
    try {// w  ww.ja  v a  2  s  .c  o m
        final int[] answers = lookupDocIdByPK(searcher, docIds);
        for (final int docId : answers) {
            if (docId != -1) {
                boolean result = writer().tryDeleteDocument(searcher.getIndexReader(), docId);
                if (result) {
                    deletedSomething = true;
                }
            }
        }
    } catch (Exception ex) {
    } finally {
        nrtRelease(searcher);
    }
    return deletedSomething;
}

From source file:org.kie.uberfire.metadata.backend.lucene.index.BaseLuceneIndex.java

License:Apache License

@Override
public void rename(final String sourceId, final Document doc) {
    final IndexSearcher searcher = nrtSearcher();
    try {//from  w ww  .  j  a  va 2  s.co  m
        int docId = lookupDocIdByPK(searcher, sourceId)[0];
        if (docId != -1) {
            writer().tryDeleteDocument(searcher.getIndexReader(), docId);
        }
        indexDocument(sourceId, doc);
    } catch (IOException ex) {
    } finally {
        nrtRelease(searcher);
    }
}

From source file:org.kie.uberfire.metadata.backend.lucene.index.LuceneIndexManager.java

License:Apache License

public void release(final IndexSearcher index) {
    try {/*from w  w  w.  j av  a  2  s. co m*/
        index.getIndexReader().close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

From source file:org.languagetool.dev.index.Searcher.java

License:Open Source License

private int getSentenceCheckCount(Query query, IndexSearcher indexSearcher) {
    final int indexSize = indexSearcher.getIndexReader().numDocs();
    // we actually check up to maxHits sentences:
    // TODO: ??//www .j a  v a 2s  .c o m
    final int sentencesChecked = Math.min(maxHits, indexSize);
    return sentencesChecked;
}