List of usage examples for org.apache.lucene.search TopScoreDocCollector create
public static TopScoreDocCollector create(int numHits, int totalHitsThreshold)
From source file:org.meresco.lucene.search.TopScoreDocSuperCollector.java
License:Open Source License
@Override protected TopDocSubCollector<TopScoreDocSuperCollector> createSubCollector() throws IOException { return new TopDocSubCollector<TopScoreDocSuperCollector>( TopScoreDocCollector.create(super.numHits, this.docsScoredInOrder), this); }
From source file:org.ms123.common.data.lucene.LuceneServiceImpl.java
License:Open Source License
private Map _doQuery(String namespace, String queryString) throws Exception { System.out.println("LuceneServiceImpl.query:" + queryString + "/" + namespace); try {//from w w w .ja v a2s . co m IndexSearcher searcher = getIndexSearcher(namespace); StoreDesc sdesc = StoreDesc.getNamespaceData(namespace); StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_33); QueryParser parser = new QueryParser(Version.LUCENE_33, "fulltext", analyzer); parser.setAllowLeadingWildcard(true); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query query = parser.parse(queryString); System.out.println("queryParsed:" + query); TopScoreDocCollector collector = TopScoreDocCollector.create(100000, true); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; System.out.println("Hits:" + hits.length); Map<String, List> retMap = new HashMap(); Map<String, List> viewMap = new HashMap(); for (int i = 0; i < hits.length && i < MAX; i++) { Document hitDoc = searcher.doc(hits[i].doc); System.out.println(hitDoc.get("id") + ",module:" + hitDoc.get(ENTITY)); String entity = hitDoc.get(ENTITY); List viewFields = viewMap.get(entity); if (viewFields == null) { //viewFields = m_settingService.getEntityViewConfigFields(p, sysMap); //@@@MS viewFields = m_settingService.getFieldsForEntityView(sdesc,entity,"global-search"); viewFields = m_settingService.getFieldsForEntityView(sdesc.getNamespace(), entity, "global-search"); viewMap.put(entity, viewFields); } List hitList = retMap.get(entity); if (hitList == null) { hitList = new ArrayList(); retMap.put(entity, hitList); } fillHitList(hitDoc, hitList, viewFields); } System.out.println("retMap:" + retMap); return retMap; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("LuceneServiceImpl.queryIdList", e); } }
From source file:org.ms123.common.data.lucene.LuceneServiceImpl.java
License:Open Source License
public List<Integer> queryIdList(String namespace, String entityName, String queryString) { List<Integer> idList = new ArrayList(); try {//w ww.j a va2 s. c om IndexSearcher searcher = getIndexSearcher(namespace); StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_33); QueryParser parser = new QueryParser(Version.LUCENE_33, "fulltext", analyzer); parser.setAllowLeadingWildcard(true); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query query = parser.parse(queryString + " AND module:" + entityName); System.out.println("queryParsed:" + query); TopScoreDocCollector collector = TopScoreDocCollector.create(100000, true); searcher.search(query, collector); System.out.println("searcher.maxDocs:" + searcher.maxDoc()); ScoreDoc[] hits = collector.topDocs().scoreDocs; System.out.println("Hits:" + hits.length); for (int i = 0; i < hits.length; i++) { Document hitDoc = searcher.doc(hits[i].doc); // getting actual document System.out.println(hitDoc.get("id")); idList.add(Integer.parseInt(hitDoc.get("id"))); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("LuceneServiceImpl.queryIdList", e); } System.out.println("idList:" + idList); return idList; }
From source file:org.ofbiz.content.test.LuceneTests.java
License:Apache License
public void testSearchTermHand() throws Exception { Map<String, Object> ctx = new HashMap<String, Object>(); ctx.put("contentId", "WebStoreCONTENT"); ctx.put("userLogin", userLogin); Map<String, Object> resp = dispatcher.runSync("indexContentTree", ctx); assertTrue("Could not init search index", ServiceUtil.isSuccess(resp)); try {/*from w ww . jav a 2s .co m*/ Thread.sleep(3000); // sleep 3 seconds to give enough time to the indexer to process the entries } catch (Exception e) { } Directory directory = FSDirectory.open(new File(SearchWorker.getIndexPath("content"))); DirectoryReader r = null; try { r = DirectoryReader.open(directory); } catch (Exception e) { fail("Could not open search index: " + directory); } BooleanQuery combQuery = new BooleanQuery(); String queryLine = "hand"; IndexSearcher searcher = new IndexSearcher(r); Analyzer analyzer = new StandardAnalyzer(SearchWorker.LUCENE_VERSION); QueryParser parser = new QueryParser(SearchWorker.LUCENE_VERSION, "content", analyzer); Query query = parser.parse(queryLine); combQuery.add(query, BooleanClause.Occur.MUST); TopScoreDocCollector collector = TopScoreDocCollector.create(10, false); searcher.search(combQuery, collector); assertEquals("Only 1 result expected from the testdata", 1, collector.getTotalHits()); }
From source file:org.openmrs.module.conceptmanagementapps.api.impl.ConceptManagementAppsServiceImpl.java
License:Open Source License
private Set<Integer> searchIndexesGetAncestorTermIds(String termId, Set<Long> listOfNewTermIds, Set<Integer> listOfDocIds, ConceptSource conceptSource, IndexSearcher searcher) { try {//w ww . j av a 2s . c om TopScoreDocCollector sourceIdCollector = TopScoreDocCollector.create(1000, true); Query sourceIdQuery = new QueryParser(Version.LUCENE_44, PARENT_TERM, analyzer).parse(termId); searcher.search(sourceIdQuery, sourceIdCollector); ScoreDoc[] hits = sourceIdCollector.topDocs().scoreDocs; for (int i = 0; i < hits.length; ++i) { if (!getManageSnomedCTProcessCancelled()) { int docId = hits[i].doc; Document d = searcher.doc(docId); Long id = Long.valueOf(d.get(ROW_ID)).longValue(); String childIdString = d.get(CHILD_TERM); int listSizeBefore = listOfNewTermIds.size(); listOfNewTermIds.add(id); listOfDocIds.add(docId); int listSizeAfter = listOfNewTermIds.size(); if (listSizeAfter > listSizeBefore) { searchIndexesGetAncestorTermIds(childIdString, listOfNewTermIds, listOfDocIds, conceptSource, searcher); } } else { return null; } } } catch (Exception e) { log.error(e); } return listOfDocIds; }
From source file:org.openmrs.module.conceptmanagementapps.api.impl.ConceptManagementAppsServiceImpl.java
License:Open Source License
private List<ConceptReferenceTerm> createNewMappings(List<ConceptReferenceTerm> listOfExistingTerms, IndexSearcher searcher, ConceptMapType mapType) { List<ConceptReferenceTerm> listOfTermsWithNewMappings = new ArrayList<ConceptReferenceTerm>(); Map<String, ConceptReferenceTerm> termHashMap = createConceptReferenceTermCodeHashMap(listOfExistingTerms); try {/*from w ww . j a v a 2 s .c o m*/ for (ConceptReferenceTerm term : listOfExistingTerms) { if (!getManageSnomedCTProcessCancelled()) { boolean mapAdded = false; Set<Long> listOfTermIdsAlreadyMapped = new HashSet<Long>(); TopScoreDocCollector sourceIdCollector = TopScoreDocCollector.create(1000, true); Query sourceIdQuery = new QueryParser(Version.LUCENE_44, PARENT_TERM, analyzer) .parse(term.getCode()); searcher.search(sourceIdQuery, sourceIdCollector); ScoreDoc[] hits = sourceIdCollector.topDocs().scoreDocs; for (int i = 0; i < hits.length; ++i) { int docId = hits[i].doc; Document termIds = searcher.doc(docId); int beforeSize = listOfTermIdsAlreadyMapped.size(); listOfTermIdsAlreadyMapped.add(Long.parseLong(termIds.get(CHILD_TERM))); int afterSize = listOfTermIdsAlreadyMapped.size(); if (beforeSize < afterSize) { ConceptReferenceTerm childTerm = termHashMap.get(termIds.get(CHILD_TERM)); ConceptReferenceTermMap newMap = new ConceptReferenceTermMap(); newMap.setConceptMapType(mapType); newMap.setTermA(term); newMap.setTermB(childTerm); term.addConceptReferenceTermMap(newMap); mapAdded = true; } } if (mapAdded) { listOfTermsWithNewMappings.add(term); } } else { return null; } } } catch (Exception e) { log.error("Error Creating New Mappings ", e); } return listOfTermsWithNewMappings; }
From source file:org.openmrs.module.conceptmanagementapps.api.impl.ConceptManagementAppsServiceImpl.java
License:Open Source License
private ConceptReferenceTerm addNameToReferenceTerm(ConceptReferenceTerm term, IndexSearcher searcher) { if (!getManageSnomedCTProcessCancelled()) { TopScoreDocCollector termCollector = TopScoreDocCollector.create(1000, true); String currentTermWithName = null; Document currentTermDoc = null; try {//from w w w .j av a 2 s.c o m Query termQuery = new QueryParser(Version.LUCENE_44, TERM_ID, analyzer).parse(term.getCode()); if (termQuery != null) { searcher.search(termQuery, termCollector); ScoreDoc[] termHits = termCollector.topDocs().scoreDocs; if (searcher != null && termHits.length > 0) { for (int i = 0; i < termHits.length; ++i) { int docId = termHits[i].doc; Document d = searcher.doc(docId); if (currentTermDoc == null) { currentTermDoc = searcher.doc(docId); currentTermWithName = currentTermDoc.get(TERM_NAME); } else { if (Integer.parseInt(d.get(EFFECTIVE_DATE)) > Integer .parseInt(currentTermDoc.get(EFFECTIVE_DATE))) { currentTermDoc = d; currentTermWithName = d.get(TERM_NAME); } } } term.setName(currentTermWithName); } } } catch (org.apache.lucene.queryparser.classic.ParseException e) { log.error("Lucene Error Adding Names To Reference Term ", e); } catch (IOException e) { log.error("Error Adding Names To Reference Term ", e); } return term; } else { return null; } }
From source file:org.openmrs.module.conceptmanagementapps.api.impl.ConceptManagementAppsServiceImpl.java
License:Open Source License
private List<ConceptReferenceTerm> addNamesToAllReferenceTerms(List<ConceptReferenceTerm> terms, IndexSearcher searcher) {// w w w . j a va 2 s .com List<ConceptReferenceTerm> namedTerms = new ArrayList<ConceptReferenceTerm>(); try { for (ConceptReferenceTerm term : terms) { if (!getManageSnomedCTProcessCancelled()) { String currentTermWithName = null; Document currentTermDoc = null; Query termQuery = new QueryParser(Version.LUCENE_44, TERM_ID, analyzer).parse(term.getCode()); if (termQuery != null) { TopScoreDocCollector termCollector = TopScoreDocCollector.create(1000, true); searcher.search(termQuery, termCollector); ScoreDoc[] termHits = termCollector.topDocs().scoreDocs; if (searcher != null && termHits.length > 0) { for (int i = 0; i < termHits.length; ++i) { int docId = termHits[i].doc; Document d = searcher.doc(docId); if (currentTermDoc == null) { currentTermDoc = searcher.doc(docId); currentTermWithName = currentTermDoc.get(TERM_NAME); } else { if (Integer.parseInt(d.get(EFFECTIVE_DATE)) > Integer .parseInt(currentTermDoc.get(EFFECTIVE_DATE))) { currentTermDoc = d; currentTermWithName = d.get(TERM_NAME); } } } term.setName(currentTermWithName); namedTerms.add(term); } } } else { return null; } } } catch (org.apache.lucene.queryparser.classic.ParseException e) { log.error("Adding Names To All Reference Terms ", e); } catch (IOException e) { log.error("Error Adding Names To All Reference Terms ", e); } return namedTerms; }
From source file:org.opensolaris.opengrok.search.SearchEngine.java
License:Open Source License
/** * * @param paging whether to use paging (if yes, first X pages will load * faster)/*from w w w . j a va 2 s .c o m*/ * @param root which db to search * @throws IOException */ private void searchSingleDatabase(File root, boolean paging) throws IOException { IndexReader ireader = DirectoryReader.open(FSDirectory.open(root)); searcher = new IndexSearcher(ireader); collector = TopScoreDocCollector.create(hitsPerPage * cachePages, docsScoredInOrder); searcher.search(query, collector); totalHits = collector.getTotalHits(); if (!paging && totalHits > 0) { collector = TopScoreDocCollector.create(totalHits, docsScoredInOrder); searcher.search(query, collector); } hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { int docId = hit.doc; Document d = searcher.doc(docId); docs.add(d); } }
From source file:org.opensolaris.opengrok.search.SearchEngine.java
License:Open Source License
/** * * @param paging whether to use paging (if yes, first X pages will load * faster)//ww w . jav a 2 s . c o m * @param root list of projects to search * @throws IOException */ private void searchMultiDatabase(List<Project> root, boolean paging) throws IOException { IndexReader[] subreaders = new IndexReader[root.size()]; File droot = new File(RuntimeEnvironment.getInstance().getDataRootFile(), IndexDatabase.INDEX_DIR); int ii = 0; for (Project project : root) { IndexReader ireader = (DirectoryReader.open(FSDirectory.open(new File(droot, project.getPath())))); subreaders[ii++] = ireader; } MultiReader searchables = new MultiReader(subreaders, true); if (Runtime.getRuntime().availableProcessors() > 1) { int noThreads = 2 + (2 * Runtime.getRuntime().availableProcessors()); //TODO there might be a better way for counting this - or we should honor the command line option here too! ExecutorService executor = Executors.newFixedThreadPool(noThreads); searcher = new IndexSearcher(searchables, executor); } else { searcher = new IndexSearcher(searchables); } collector = TopScoreDocCollector.create(hitsPerPage * cachePages, docsScoredInOrder); searcher.search(query, collector); totalHits = collector.getTotalHits(); if (!paging && totalHits > 0) { collector = TopScoreDocCollector.create(totalHits, docsScoredInOrder); searcher.search(query, collector); } hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { int docId = hit.doc; Document d = searcher.doc(docId); docs.add(d); } }