List of usage examples for org.apache.lucene.queryparser.classic MultiFieldQueryParser parse
public static Query parse(String[] queries, String[] fields, BooleanClause.Occur[] flags, Analyzer analyzer) throws ParseException
From source file:buscador.SearchFiles.java
License:Apache License
/** Simple command-line based search demo. */ public static void main(String[] args) throws Exception { String usage = "Usage:\tjava org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-query string] [-raw] [-paging hitsPerPage]\n\nSee http://lucene.apache.org/core/4_1_0/demo/ for details."; if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) { System.out.println(usage); System.exit(0);// w w w . j a v a 2 s .com } String index = "Zaguan1"; String[] fields = { "title", "description", "identifier", "date", "creator" }; BooleanClause.Occur[] flags = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD }; String queries = null; int repeat = 0; boolean raw = false; String queryString = null; int hitsPerPage = 10; for (int i = 0; i < args.length; i++) { if ("-index".equals(args[i])) { index = args[i + 1]; i++; } else if ("-queries".equals(args[i])) { queries = args[i + 1]; i++; } else if ("-query".equals(args[i])) { queryString = args[i + 1]; i++; } else if ("-repeat".equals(args[i])) { repeat = Integer.parseInt(args[i + 1]); i++; } else if ("-raw".equals(args[i])) { raw = true; } else if ("-paging".equals(args[i])) { hitsPerPage = Integer.parseInt(args[i + 1]); if (hitsPerPage <= 0) { System.err.println("There must be at least 1 hit per page."); System.exit(1); } i++; } } IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index))); IndexSearcher searcher = new IndexSearcher(reader); Analyzer analyzer = new SpanishAnalyzer(Version.LATEST); BufferedReader in = null; if (queries != null) { in = new BufferedReader(new InputStreamReader(new FileInputStream(queries), "UTF-8")); } else { in = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); } while (true) { if (queries == null && queryString == null) { // prompt the user System.out.println("Enter query: "); } String line = queryString != null ? queryString : in.readLine(); if (line == null || line.length() == -1) { break; } line = line.trim(); if (line.length() == 0) { break; } Query query = MultiFieldQueryParser.parse(line, fields, flags, analyzer); if (repeat > 0) { // repeat & time as benchmark Date start = new Date(); for (int i = 0; i < repeat; i++) { searcher.search(query, 100); } Date end = new Date(); System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms"); } doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString == null); if (queryString != null) { break; } } reader.close(); }
From source file:com.aurel.track.lucene.search.associatedFields.AbstractAssociatedFieldSearcher.java
License:Open Source License
/** * Gets the lucene query object//w w w . ja v a 2s. c om * @param fieldValue * @return */ protected Query getAssociatedFieldQuery(Analyzer analyzer, String fieldValue) { Query query = null; String[] searchFieldNames = getSearchFieldNames(); if (searchFieldNames != null && searchFieldNames.length > 0) { if (searchFieldNames.length == 1) { QueryParser queryParser = new QueryParser(searchFieldNames[0], analyzer); try { query = queryParser.parse(fieldValue); } catch (ParseException e) { LOGGER.error("Parsing the query string '" + fieldValue + "' for " + getLuceneFieldName() + " failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } } else { BooleanClause.Occur[] orFlags = LuceneSearcher.getOrFlagsArray(searchFieldNames.length); try { query = MultiFieldQueryParser.parse(fieldValue, searchFieldNames, orFlags, analyzer); } catch (ParseException e) { LOGGER.error("Parsing the query string '" + fieldValue + "' for " + getLuceneFieldName() + " failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } } } return query; }
From source file:com.aurel.track.lucene.search.LuceneSearcher.java
License:Open Source License
/** * Preprocess a userQueryString which do not have explicit field(s) specified * Uses some text fields as default fields but looks for the words * also in the other lookup indexes /*from w ww . j a v a2 s. c om*/ * @param analyzer * @param toBeProcessedString a part of the user entered query string * @param locale * @return */ private static Query preprocessNoExplicitField(Analyzer analyzer, String toBeProcessedString, Set<Integer> itemTypeIDs, boolean external, Locale locale) throws ParseException { //direct workItem fields BooleanQuery finalQuery = new BooleanQuery(); BooleanClause.Occur[] orFlags; Query workItemDirectQuery = null; //initialize the QueryParser with text fields as default fields BooleanQuery workItemQuery = new BooleanQuery(); List<IntegerStringBean> directTextFieldNames = getFieldNamesForPreprocessType( LuceneUtil.PREPROCESSTYPES.DIRECT); String[] fieldNamesArr = new String[directTextFieldNames.size()]; for (int i = 0; i < directTextFieldNames.size(); i++) { fieldNamesArr[i] = directTextFieldNames.get(i).getLabel(); } orFlags = getOrFlagsArray(directTextFieldNames.size()); try { workItemDirectQuery = MultiFieldQueryParser.parse(toBeProcessedString, fieldNamesArr, orFlags, analyzer); } catch (ParseException e) { LOGGER.warn("Parsing without explicit field for workItem fields (MultiFieldQueryParser) failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); throw e; } catch (Exception e) { LOGGER.warn( "Parsing without explicit field for workItem fields (MultiFieldQueryParser) failed with throwable " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } //combine with or all occurrences LOOKUPENTITYTYPES if (workItemDirectQuery != null) { workItemQuery.add(workItemDirectQuery, BooleanClause.Occur.SHOULD); } List<ILookupFieldSearcher> lookupFieldSearchers = getLookupFieldSearchers(); for (ILookupFieldSearcher lookupFieldSearcher : lookupFieldSearchers) { Query query = lookupFieldSearcher.getNoExplicitFieldQuery(analyzer, toBeProcessedString, locale); if (query != null) { workItemQuery.add(query, BooleanClause.Occur.SHOULD); } } finalQuery.add(workItemQuery, BooleanClause.Occur.MUST); Query itemTypeQuery = getItemTypeQuery(itemTypeIDs, analyzer); if (itemTypeQuery != null) { LOGGER.debug("The item type query: " + itemTypeQuery.toString()); BooleanClause.Occur occur = null; if (external) { occur = BooleanClause.Occur.MUST; } else { occur = BooleanClause.Occur.MUST_NOT; } finalQuery.add(itemTypeQuery, occur); } return finalQuery; }
From source file:es.unizar.iaaa.crawler.butler.index.SearchFiles.java
License:Apache License
/** * Simple command-line based search demo. *///from w ww .j a va 2 s. c om public ArrayList<SearchResult> search(String dir, String queryS) throws Exception { String index = dir + "index"; IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index))); IndexSearcher searcher = new IndexSearcher(reader); Analyzer analyzer = new EnglishAnalyzer(); // para cada necesidad se preprocesa y se lanza una query String line = queryS; line = line.trim(); // quiamos signos de puntuacion para el prefiltrado line = line.replace(".", " "); line = line.replace(",", " "); line = line.replace("(", " "); line = line.replace(")", " "); line = line.replace(";", " "); line = line.replace(":", " "); line = line.replace("-", " "); // quitamos palabrasvacias de signifcado y expanimos la consulta // semanticamente Query queryMultiple = null; BooleanQuery query = new BooleanQuery();// valor este de la caja de // consulta // Consulta generica sobre todos los indices if (!line.equals("")) { String[] fields = { "content" }; // DEBE APARECER EN EL TITULO ALGO SOBRE ESTO BooleanClause.Occur[] flags = { BooleanClause.Occur.SHOULD }; queryMultiple = MultiFieldQueryParser.parse(line, fields, flags, analyzer); query.add(queryMultiple, BooleanClause.Occur.SHOULD); } ArrayList<SearchResult> result = doPagingSearch(dir, searcher, query); reader.close(); return result; }
From source file:fr.paris.lutece.plugins.helpdesk.service.helpdesksearch.HelpdeskLuceneSearchEngine.java
License:Open Source License
/** * Return search results/*from w ww . ja v a 2 s. c o m*/ * @param nIdFaq The id Faq * @param strContent The search query * @param dateBegin The date begin * @param dateEnd The date end * @param subject The {@link Subject} * @param bSearchSubSubjects true if the query must include sub-subjects * @param request The {@link HttpServletRequest} * @return Results as a collection of SearchResult */ public List<SearchResult> getSearchResults(int nIdFaq, String strContent, Date dateBegin, Date dateEnd, Subject subject, boolean bSearchSubSubjects, HttpServletRequest request) { ArrayList<SearchItem> listResults = new ArrayList<SearchItem>(); IndexSearcher searcher = null; Query filterRole = getFilterRoles(request); try (Directory directory = IndexationService.getDirectoryIndex(); IndexReader ir = DirectoryReader.open(directory);) { searcher = new IndexSearcher(ir); Collection<String> queries = new ArrayList<String>(); Collection<String> fields = new ArrayList<String>(); Collection<BooleanClause.Occur> flags = new ArrayList<BooleanClause.Occur>(); //Faq Id if (nIdFaq != -1) { Query queryFaqId = new TermQuery(new Term(HelpdeskSearchItem.FIELD_FAQ_ID, String.valueOf(nIdFaq))); queries.add(queryFaqId.toString()); fields.add(HelpdeskSearchItem.FIELD_FAQ_ID); flags.add(BooleanClause.Occur.MUST); } //Type (=helpdesk) PhraseQuery.Builder queryTypeBuilder = new PhraseQuery.Builder(); queryTypeBuilder.add(new Term(HelpdeskSearchItem.FIELD_TYPE, HelpdeskPlugin.PLUGIN_NAME)); PhraseQuery queryType = queryTypeBuilder.build(); queries.add(queryType.toString()); fields.add(HelpdeskSearchItem.FIELD_TYPE); flags.add(BooleanClause.Occur.MUST); //Content if ((strContent != null) && !strContent.equals(EMPTY_STRING)) { Query queryContent = new TermQuery(new Term(HelpdeskSearchItem.FIELD_CONTENTS, strContent)); queries.add(queryContent.toString()); fields.add(HelpdeskSearchItem.FIELD_CONTENTS); flags.add(BooleanClause.Occur.MUST); } //Dates if ((dateBegin != null) && (dateEnd != null)) { BytesRef strDateBegin = new BytesRef(DateTools.dateToString(dateBegin, DateTools.Resolution.DAY)); BytesRef strDateEnd = new BytesRef(DateTools.dateToString(dateEnd, DateTools.Resolution.DAY)); Query queryDate = new TermRangeQuery(HelpdeskSearchItem.FIELD_DATE, strDateBegin, strDateEnd, true, true); queries.add(queryDate.toString()); fields.add(HelpdeskSearchItem.FIELD_DATE); flags.add(BooleanClause.Occur.MUST); } //Subjects if ((bSearchSubSubjects) && (subject != null)) { Plugin plugin = PluginService.getPlugin(HelpdeskPlugin.PLUGIN_NAME); Collection<Term> listSubjects = new ArrayList<Term>(); getListSubjects(listSubjects, subject, plugin); String strQuerySubject = OPEN_PARENTHESIS; for (Term term : listSubjects) { Query querySubject = new TermQuery(term); strQuerySubject += (querySubject.toString() + SPACE); } strQuerySubject += CLOSE_PARENTHESIS; queries.add(strQuerySubject); fields.add(HelpdeskSearchItem.FIELD_SUBJECT); flags.add(BooleanClause.Occur.MUST); } else { if ((subject != null)) { Query querySubject = new TermQuery( new Term(HelpdeskSearchItem.FIELD_SUBJECT, String.valueOf(subject.getId()))); queries.add(querySubject.toString()); fields.add(HelpdeskSearchItem.FIELD_SUBJECT); flags.add(BooleanClause.Occur.MUST); } } Query queryMulti = MultiFieldQueryParser.parse((String[]) queries.toArray(new String[queries.size()]), (String[]) fields.toArray(new String[fields.size()]), (BooleanClause.Occur[]) flags.toArray(new BooleanClause.Occur[flags.size()]), IndexationService.getAnalyser()); BooleanQuery.Builder bQueryMultiBuilder = new BooleanQuery.Builder(); bQueryMultiBuilder.add(queryMulti, BooleanClause.Occur.MUST); if (filterRole != null) { bQueryMultiBuilder.add(filterRole, BooleanClause.Occur.FILTER); } TopDocs topDocs = searcher.search(bQueryMultiBuilder.build(), LuceneSearchEngine.MAX_RESPONSES); ScoreDoc[] hits = topDocs.scoreDocs; for (int i = 0; i < hits.length; i++) { int docId = hits[i].doc; Document document = searcher.doc(docId); SearchItem si = new SearchItem(document); listResults.add(si); } } catch (Exception e) { AppLogService.error(e.getMessage(), e); } return convertList(listResults); }
From source file:io.jpress.searcher.LuceneSearcher.java
License:LGPL
@Override public Page<SearcherBean> search(String queryString, String module, int pageNum, int pageSize) { List<SearcherBean> list = new ArrayList<SearcherBean>(); try {/*w w w .jav a2 s .co m*/ IndexSearcher mIndexSearcher = getIndexSearcher(); queryString = QueryParser.escape(queryString); String[] queries = { queryString, queryString, queryString }; String[] fields = { "title", "description", "content" }; BooleanClause.Occur[] flags = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD }; Query query = MultiFieldQueryParser.parse(queries, fields, flags, new JcsegAnalyzer5X(JcsegTaskConfig.COMPLEX_MODE)); TopDocs topDocs = mIndexSearcher.search(query, 1000);//1000,?1000? if (topDocs != null && topDocs.totalHits > 0) { ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (int i = 0; i < scoreDocs.length; i++) { int docId = scoreDocs[i].doc; Document doc = mIndexSearcher.doc(docId); list.add(createSearcherBean(doc)); } } } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } return new Page<SearcherBean>(list, pageNum, pageSize, list.size() / pageSize, list.size()); }
From source file:org.eclipse.agail.recommenderserver.RecommendCloud.java
License:Open Source License
public void generateQuery(GatewayProfile profile) { String[] fields = { "locations", "pricing", "services", "runtimes" }; String loc = "EU"; String price = "free"; String services = "TODO_ADD_MORE"; if (profile.getLocation() != "") loc = profile.getLocation();// ww w . ja v a 2s . com if (profile.getPricingPreferences() != "") price = profile.getPricingPreferences().replaceAll(",", " OR "); if (profile.getLocation() != "") loc = profile.getLocation(); if (profile.getRequiredServices() != "") services = profile.getRequiredServices().replaceAll(",", " OR "); String[] queries = { loc, price, services, "node" }; BooleanClause.Occur[] flags = { BooleanClause.Occur.MUST, BooleanClause.Occur.SHOULD, BooleanClause.Occur.MUST, BooleanClause.Occur.MUST }; MultiFieldQueryParser queryParserCloud = new MultiFieldQueryParser(queries, CloudMarketplace.analyzer_cloud); try { finalQuery = queryParserCloud.parse(queries, fields, flags, CloudMarketplace.analyzer_cloud); } catch (org.apache.lucene.queryparser.classic.ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }