List of usage examples for org.apache.lucene.search IndexSearcher getIndexReader
public IndexReader getIndexReader()
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; }