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

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

Introduction

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

Prototype

public <C extends Collector, T> T search(Query query, CollectorManager<C, T> collectorManager)
        throws IOException 

Source Link

Document

Lower-level search API.

Usage

From source file:com.czw.search.lucene.example.facet.SimpleFacetsExample.java

License:Apache License

/**
 * User runs a query and counts facets only without collecting the matching documents.
 *//*from  w  ww  .ja v  a  2 s  . c o m*/
private List<FacetResult> facetsOnly() throws IOException {
    DirectoryReader indexReader = DirectoryReader.open(indexDir);
    IndexSearcher searcher = new IndexSearcher(indexReader);
    TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir);

    FacetsCollector fc = new FacetsCollector();

    // MatchAllDocsQuery is for "browsing" (counts facets
    // for all non-deleted docs in the index); normally
    // you'd use a "normal" query:
    searcher.search(new MatchAllDocsQuery(), fc);

    // Retrieve results
    List<FacetResult> results = new ArrayList<>();

    // Count both "Publish Date" and "Author" dimensions
    Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc);

    results.add(facets.getTopChildren(10, "Author"));
    results.add(facets.getTopChildren(10, "Publish Date"));
    results.add(facets.getTopChildren(10, "Category"));

    indexReader.close();
    taxoReader.close();

    return results;
}

From source file:com.dasasian.chok.lucene.integration.LuceneComplianceTest.java

License:Apache License

@SuppressWarnings("unchecked")
private void checkQueryResults(IndexSearcher indexSearcher, String chokIndexName, String fieldName,
        String queryTerm, int resultCount, Sort sort) throws Exception {
    // final Query query = new QueryParser("", new
    // KeywordAnalyzer()).parse(fieldName + ": " + queryTerm);
    final Query query = new QueryParser(Version.LUCENE_30, "", new KeywordAnalyzer())
            .parse(fieldName + ": " + queryTerm);
    final TopDocs searchResultsLucene;
    final Hits searchResultsChok;
    if (sort == null) {
        searchResultsLucene = indexSearcher.search(query, resultCount);
        searchResultsChok = luceneClient.search(query, new String[] { chokIndexName }, resultCount);
    } else {//  www  .  ja v a 2  s.co m
        searchResultsLucene = indexSearcher.search(query, null, resultCount, sort);
        searchResultsChok = luceneClient.search(query, new String[] { chokIndexName }, resultCount, sort);
    }

    assertEquals(searchResultsLucene.totalHits, searchResultsChok.size());

    ScoreDoc[] scoreDocs = searchResultsLucene.scoreDocs;
    List<Hit> hits = searchResultsChok.getHits();
    if (sort == null) {
        for (int i = 0; i < scoreDocs.length; i++) {
            assertEquals(scoreDocs[i].score, hits.get(i).getScore(), 0.0);
        }
    } else {
        for (int i = 0; i < scoreDocs.length; i++) {
            Object[] luceneFields = ((FieldDoc) scoreDocs[i]).fields;
            WritableComparable[] chokFields = hits.get(i).getSortFields();
            assertEquals(luceneFields.length, chokFields.length);
            for (int j = 0; j < luceneFields.length; j++) {
                assertEquals(luceneFields[j].toString(), chokFields[j].toString());
            }

            // Arrays.equals(scoreDocs, chokFields);
        }
    }
}

From source file:com.docdoku.server.IndexSearcherBean.java

License:Open Source License

public Set<DocumentMasterKey> searchInIndex(String pWorkspaceId, String pContent) {
    try {//  w ww . j a  v a2  s. com
        Set<DocumentMasterKey> indexedKeys = new HashSet<DocumentMasterKey>();

        Query fullNameQuery = new WildcardQuery(new Term("fullName", pWorkspaceId + "/*"));
        Query contentQuery = new TermQuery(new Term("content", pContent));
        BooleanQuery mainQuery = new BooleanQuery();
        mainQuery.add(fullNameQuery, BooleanClause.Occur.MUST);
        mainQuery.add(contentQuery, BooleanClause.Occur.MUST);

        if (!indexReader.isCurrent()) {
            //TODO use IndexReader.reopen(); when available
            indexReader.close();
            indexReader = IndexReader.open(FSDirectory.open(new File(indexPath)));
        }
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        ScoreDoc[] hits = indexSearcher.search(mainQuery, 500).scoreDocs;
        for (int i = 0; i < hits.length; i++) {
            org.apache.lucene.document.Document doc = indexReader.document(hits[i].doc);
            String fullName = doc.get("fullName");
            String[] partRefs = BinaryResource.parseOwnerRef(fullName).split("/");
            DocumentMasterKey key = new DocumentMasterKey(pWorkspaceId, partRefs[0], partRefs[1]);
            indexedKeys.add(key);
        }

        return indexedKeys;
    } catch (CorruptIndexException ex) {
        throw new EJBException(ex);
    } catch (IOException ex) {
        throw new EJBException(ex);
    }
}

From source file:com.doculibre.constellio.lucene.BaseLuceneIndexHelper.java

License:Open Source License

protected synchronized int getDocNum(T object) {
    int docNum;//  w w  w.j  a  va 2s . c o  m
    String uniqueIndexFieldName = getUniqueIndexFieldName();
    String uniqueIndexFieldValue = getUniqueIndexFieldValue(object);
    if (uniqueIndexFieldValue != null) {
        String query = uniqueIndexFieldName + ":" + uniqueIndexFieldValue;
        try {
            Analyzer analyzer = analyzerProvider.getAnalyzer(Locale.FRENCH);
            QueryParser multiFielsQP = new QueryParser(Version.LUCENE_44, uniqueIndexFieldName, analyzer);
            Query luceneQuery = multiFielsQP.parse(query);

            Directory directory = FSDirectory.open(indexDir);
            IndexReader reader = DirectoryReader.open(directory);
            IndexSearcher indexSearcher = new IndexSearcher(reader);
            TopDocs topDocs = indexSearcher.search(luceneQuery, reader.maxDoc());
            if (topDocs.totalHits > 0) {
                docNum = topDocs.scoreDocs[0].doc;
            } else {
                docNum = -1;
            }
            //               indexSearcher.close();
            // TODO add finally
            reader.close();
            directory.close();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        } catch (CorruptIndexException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } else {
        docNum = -1;
    }
    return docNum;
}

From source file:com.dreamerpartner.codereview.lucene.SearchHelper.java

License:Apache License

/**
 * ??//  w  w w. j a  va 2s  . co  m
 * @param in
 * @param searcher
 * @param query
 * @return
 * @throws IOException
 */
public static Document searchOne(BufferedReader in, IndexSearcher searcher, Query query) throws IOException {
    TopDocs results = searcher.search(query, 1);
    ScoreDoc[] hits = results.scoreDocs;
    int numTotal = results.totalHits;
    if (numTotal > 0) {
        return searcher.doc(hits[0].doc);
    }
    return null;
}

From source file:com.dreamerpartner.codereview.lucene.SearchHelper.java

License:Apache License

/**
 * /*w  ww.  j a v  a  2 s  .  c  o  m*/
 * @param searcher
 * @param query
 * @param sort 
 * @param pageNo
 * @param pageSize
 * @return
 * @throws IOException
 */
public static PageBean<Document> doPagingSearch(IndexSearcher searcher, Query query, Sort sort, int pageNo,
        int pageSize) throws IOException {
    if (sort == null)
        sort = new Sort(new SortField("id", Type.STRING));

    int start = (pageNo - 1) * pageSize;
    int numHits = pageNo * pageSize;
    TopFieldCollector collector = TopFieldCollector.create(sort, numHits, false, false, false, false);
    searcher.search(query, collector);
    ScoreDoc[] hits = collector.topDocs(start, pageSize).scoreDocs;
    if (hits == null || hits.length < 1)
        return null;

    List<Document> docs = new ArrayList<Document>(pageSize);
    for (int i = 0; i < hits.length; i++) {
        Document doc = searcher.doc(hits[i].doc);
        docs.add(doc);
    }
    return new PageBean<Document>(pageSize, pageNo, collector.getTotalHits(), docs);
}

From source file:com.eclipsesource.connect.search.Searcher.java

License:Open Source License

private void performSearch(LuceneSearchResult searchResult, String query) {
    try (DirectoryReader reader = DirectoryReader.open(directory)) {
        IndexSearcher searcher = new IndexSearcher(reader);
        FuzzyQuery luceneQuery = new FuzzyQuery(new Term(Indexer.CONTENT_KEY, query));
        TopDocs topDocs = searcher.search(luceneQuery, Integer.MAX_VALUE);
        populateSearchResult(searchResult, reader, topDocs);
    } catch (IOException shouldNotHappen) {
        throw new IllegalStateException(shouldNotHappen);
    }//from  w  ww.jav  a  2 s. co  m
}

From source file:com.edgenius.wiki.search.service.AbstractSearchService.java

License:Open Source License

protected SearchResult commonSearch(final String keyword, final int currPageNumber, final int returnCount,
        final User user, final String... advance) throws SearchException {

    try {//from  w  w  w. j a  va  2 s. com
        return (SearchResult) this.search(new SearcherCallback() {
            public Object doWithSearcher(IndexSearcher searcher) throws SearchException {
                try {
                    if (StringUtils.trimToEmpty(keyword).length() > 0) {
                        Query[] queries = createQuery(keyword, advance);
                        Sort sort = createSort(advance);
                        // Don't use Lucene default filter function to filter out no reading permission results 
                        // it is too slow - it will retrieve all documents in index - whatever it is matched or not
                        //Filter filter = new SecurityFilter(user);
                        TopDocs hits;
                        if (sort == null) {
                            hits = searcher.search(queries[0], LuceneConfig.MAX_RETURN);
                        } else {
                            hits = searcher.search(queries[0], LuceneConfig.MAX_RETURN, sort);
                        }

                        SearchResult rs = getResult(searcher, hits, keyword, currPageNumber, returnCount, user,
                                queries[1]);
                        return rs;
                    } else {
                        return emptyResult(keyword, currPageNumber);
                    }
                } catch (Exception e) {
                    throw new SearchException(e);
                }
            }

        });
    } catch (Exception e) {
        log.error("Search failed ", e);
        throw new SearchException(e);
    }
}

From source file:com.edgenius.wiki.search.service.AttachmentSearchServiceImpl.java

License:Open Source License

public Document searchByNodeUuid(final String nodeUuid) throws SearchException {

    return (Document) this.search(new SearcherCallback() {
        public Object doWithSearcher(IndexSearcher searcher) throws SearchException {
            try {
                Term identifierTerm = new Term(FieldName.KEY, nodeUuid.toLowerCase());
                TermQuery query = new TermQuery(identifierTerm);
                TopDocs hits = searcher.search(query, LuceneConfig.MAX_RETURN);
                Document doc = null;

                if (hits.totalHits > 0) {
                    //assume only one
                    doc = searcher.doc(hits.scoreDocs[0].doc);
                }//from w ww  . java  2 s.  co  m
                return doc;
            } catch (Exception e) {
                throw new SearchException(e);
            }
        }
    });
}

From source file:com.epam.catgenome.dao.index.FeatureIndexDao.java

License:Open Source License

/**
 * Queries a feature index of a project, specified by ID
 *
 * @param projectId ID of a project, which index to work with
 * @param query a query to search in index
 * @return a {List} of {@code FeatureIndexEntry} objects that satisfy index query
 * @deprecated//  w w  w  .  ja v  a 2  s  . c o m
 * @throws IOException
 */
@Deprecated
private IndexSearchResult searchLuceneIndexForProject(final long projectId, Query query,
        List<String> vcfInfoFields, Integer maxResultsCount, Sort sort) throws IOException {
    Map<Integer, FeatureIndexEntry> entryMap = new LinkedHashMap<>();

    int totalHits = 0;
    try (Directory index = fileManager.getIndexForProject(projectId);
            IndexReader reader = DirectoryReader.open(index)) {
        if (reader.numDocs() == 0) {
            return new IndexSearchResult(Collections.emptyList(), false, 0);
        }

        IndexSearcher searcher = new IndexSearcher(reader);
        final TopDocs docs;
        int resultsCount = maxResultsCount == null ? reader.numDocs() : maxResultsCount;
        if (sort == null) {
            docs = searcher.search(query, resultsCount);
        } else {
            docs = searcher.search(query, resultsCount, sort);
        }

        totalHits = docs.totalHits;
        final ScoreDoc[] hits = docs.scoreDocs;

        Map<Long, BookmarkIndexEntry> foundBookmarkEntries = new HashMap<>(); // for batch bookmarks loading
        createIndexEntries(hits, entryMap, foundBookmarkEntries, searcher, vcfInfoFields);
        setBookmarks(foundBookmarkEntries);
    } catch (IOException e) {
        LOGGER.error(MessageHelper.getMessage(MessagesConstants.ERROR_FEATURE_INDEX_SEARCH_FAILED), e);
        return new IndexSearchResult(Collections.emptyList(), false, 0);
    }

    return new IndexSearchResult(new ArrayList<>(entryMap.values()),
            maxResultsCount != null && totalHits > maxResultsCount, totalHits);
}