List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery
BooleanQuery
From source file:com.dubture.indexing.core.index.QueryBuilder.java
License:Open Source License
public static Query createPathQuery(IPath path, String referenceId) { IndexingCorePlugin.debug("Getting pathquery for " + path.toString()); PrefixQuery query = new PrefixQuery(new Term(IndexField.PATH, path.toString())); TermQuery refQuery = new TermQuery(new Term(IndexField.TYPE, referenceId)); BooleanQuery boolQuery = new BooleanQuery(); boolQuery.add(query, BooleanClause.Occur.MUST); boolQuery.add(refQuery, BooleanClause.Occur.MUST); IndexingCorePlugin.debug("query: " + boolQuery.toString()); return boolQuery; }
From source file:com.dubture.indexing.core.index.QueryBuilder.java
License:Open Source License
public static Query createDeleteReferencesQuery(IFile file, String type) { BooleanQuery boolQuery = new BooleanQuery(); String path = file.getFullPath().toString(); boolQuery.add(new TermQuery(new Term(IndexField.PATH, path)), BooleanClause.Occur.MUST); boolQuery.add(new TermQuery(new Term(IndexField.FILENAME, file.getName())), BooleanClause.Occur.MUST); boolQuery.add(new TermQuery(new Term(IndexField.TYPE, type)), BooleanClause.Occur.MUST); IndexingCorePlugin.debug("Creating deleteByReference query: " + boolQuery.toString()); return boolQuery; }
From source file:com.duroty.application.files.manager.SearchManager.java
License:Open Source License
/** * DOCUMENT ME!// w ww . ja v a2s . c om * * @param hsession DOCUMENT ME! * @param repositoryName DOCUMENT ME! * @param token DOCUMENT ME! * @param page DOCUMENT ME! * @param messagesByPage DOCUMENT ME! * @param order DOCUMENT ME! * @param orderType DOCUMENT ME! * * @return DOCUMENT ME! * * @throws FilesException DOCUMENT ME! */ public SearchObj simple(Session hsession, String repositoryName, String token, String folderName, int label, int page, int messagesByPage, int order, String orderType) throws FilesException { String lucenePathMessages = null; if (!defaultLucenePath.endsWith(File.separator)) { lucenePathMessages = defaultLucenePath + File.separator + repositoryName + File.separator + Constants.MAIL_LUCENE_MESSAGES; } else { lucenePathMessages = defaultLucenePath + repositoryName + File.separator + Constants.MAIL_LUCENE_MESSAGES; } Searcher searcher = null; SearchObj searchObj = new SearchObj(); Sort sort = null; try { Users user = getUser(hsession, repositoryName); Locale locale = new Locale(user.getUseLanguage()); TimeZone timeZone = TimeZone.getDefault(); Date now = new Date(); Calendar calendar = Calendar.getInstance(timeZone, locale); calendar.setTime(now); SimpleDateFormat formatter1 = new SimpleDateFormat("MMM dd", locale); SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss", locale); SimpleDateFormat formatter3 = new SimpleDateFormat("MM/yy", locale); searcher = MailIndexer.getSearcher(lucenePathMessages); Query query = null; if (!StringUtils.isBlank(folderName) && folderName.equals(this.folderFiles)) { BooleanQuery booleanQuery = new BooleanQuery(); QueryParser parser = new QueryParser(Field_subject, analyzer); parser.setDefaultOperator(Operator.AND); Query aux1 = parser.parse("Files-System"); booleanQuery.add(aux1, BooleanClause.Occur.MUST); Query aux2 = SimpleQueryParser.parse(token, analyzer); booleanQuery.add(aux2, BooleanClause.Occur.MUST); /*QueryParser parser2 = new QueryParser(Field_attachments, analyzer); parser2.setDefaultOperator(Operator.AND); Query aux3 = parser2.parse("Message Text"); booleanQuery.add(aux3, BooleanClause.Occur.MUST_NOT);*/ query = booleanQuery; } else { /*BooleanQuery booleanQuery = new BooleanQuery(); QueryParser parser = new QueryParser(Field_attachments, analyzer); parser.setDefaultOperator(Operator.AND); Query aux1 = parser.parse("Message Text"); booleanQuery.add(aux1, BooleanClause.Occur.MUST_NOT); Query aux2 = SimpleQueryParser.parse(token, analyzer); booleanQuery.add(aux2, BooleanClause.Occur.MUST); query = booleanQuery;*/ query = SimpleQueryParser.parse(token, analyzer); } Hits hits = null; Date searchStart = new Date(); boolean reverse = true; if (orderType.equals("ASC")) { reverse = false; } else { reverse = true; } switch (order) { case ORDER_BY_SIZE: sort = new Sort(new SortField[] { new SortField(Field_size, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; case ORDER_BY_DATE: sort = new Sort(new SortField[] { new SortField(Field_lastDate, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; default: sort = new Sort(new SortField[] { new SortField(null, SortField.SCORE, !reverse) }); break; } ChainedFilter chained = null; if (label > 0) { chained = getChainedFilter(hsession, repositoryName, label); } if (chained != null) { hits = searcher.search(query, chained, sort); } else { hits = searcher.search(query, sort); } Date searchEnd = new Date(); //time in seconds double time = ((double) (searchEnd.getTime() - searchStart.getTime())) / (double) 1000; int hitsLength = hits.length(); if (hitsLength <= 0) { return null; } int start = page * messagesByPage; int end = start + messagesByPage; if (end > 0) { end = Math.min(hitsLength, end); } else { end = hitsLength; } if (start > end) { throw new SearchException("Search index of bound. start > end"); } Vector files = new Vector(); for (int j = start; j < end; j++) { Document doc = hits.doc(j); if (doc != null) { LuceneMessage lmsg = new LuceneMessage(doc); Message message = getMessage(hsession, repositoryName, lmsg.getIdint()); if (message != null) { Set set = message.getAttachments(); if (set != null) { Iterator it = set.iterator(); while (it.hasNext()) { Attachment attachment = (Attachment) it.next(); String name = attachment.getAttName(); if (!StringUtils.isBlank(name) && !name.equals("Message Text")) { AttachmentObj obj = new AttachmentObj(); obj.setContentType(attachment.getAttContentType()); obj.setScore((int) (hits.score(j) * 100)); Date date = message.getMesDate(); if (date != null) { Calendar calendar2 = Calendar.getInstance(timeZone, locale); calendar2.setTime(date); if ((calendar.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)) && (calendar.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH)) && (calendar.get(Calendar.DATE) == calendar2.get(Calendar.DATE))) { obj.setDateStr(formatter2.format(calendar2.getTime())); } else if (calendar.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)) { obj.setDateStr(formatter1.format(calendar2.getTime())); } else { obj.setDateStr(formatter3.format(calendar2.getTime())); } } obj.setDate(date); obj.setDate(date); obj.setIdint(attachment.getAttIdint()); obj.setName(attachment.getAttName()); obj.setPart(attachment.getAttPart()); int size = attachment.getAttSize(); size /= 1024; if (size > 1024) { size /= 1024; obj.setSize(size + " MB"); } else { obj.setSize(((size > 0) ? (size + "") : "<1") + " kB"); } String extension = (String) this.extensions.get(attachment.getAttContentType()); if (StringUtils.isBlank(extension)) { extension = "generic"; } obj.setExtension(extension); if (message.isMesFlagged()) { obj.setFlagged(true); } else { obj.setFlagged(false); } if (message.getLabMeses() != null) { Iterator it2 = message.getLabMeses().iterator(); StringBuffer lab = new StringBuffer(); while (it2.hasNext()) { if (lab.length() > 0) { lab.append(", "); } LabMes labMes = (LabMes) it2.next(); lab.append(labMes.getId().getLabel().getLabName()); } if (lab.length() > 0) { obj.setLabel(lab.toString()); } else { } } obj.setBox(message.getMesBox()); obj.setMid(message.getMesName()); files.addElement(obj); } } } } } } searchObj.setHits(hitsLength); searchObj.setTime(time); searchObj.setFiles(files); } catch (Exception ex) { throw new FilesException(ex); } finally { GeneralOperations.closeHibernateSession(hsession); } return searchObj; }
From source file:com.duroty.lucene.bookmark.search.MultiFieldQueryParser.java
License:Open Source License
/** * <p>/*from w ww . j a v a2 s . co m*/ * Parses a query which searches on the fields specified. * <p> * If x fields are specified, this effectively constructs: * <pre> * <code> * (field1:query) (field2:query) (field3:query)...(fieldx:query) * </code> * </pre> * * @param query Query string to parse * @param fields Fields to search on * @param analyzer Analyzer to use * @throws ParseException if query parsing fails * @throws TokenMgrError if query parsing fails */ public static Query parse(String query, String[] fields, Analyzer analyzer) throws ParseException { BooleanQuery bQuery = new BooleanQuery(); for (int i = 0; i < fields.length; i++) { QueryParser qp = new QueryParser(fields[i], analyzer); qp.setDefaultOperator(operator); Query q = qp.parse(query); //bQuery.add(q, false, false); bQuery.add(q, BooleanClause.Occur.SHOULD); } return bQuery; }
From source file:com.duroty.lucene.bookmark.search.MultiFieldQueryParser.java
License:Open Source License
/** * <p>//from w w w. ja va 2 s . co m * Parses a query, searching on the fields specified. * Use this if you need to specify certain fields as required, * and others as prohibited. * <p><pre> * Usage: * <code> * String[] fields = {"filename", "contents", "description"}; * int[] flags = {MultiFieldQueryParser.NORMAL FIELD, * MultiFieldQueryParser.REQUIRED FIELD, * MultiFieldQueryParser.PROHIBITED FIELD,}; * parse(query, fields, flags, analyzer); * </code> * </pre> *<p> * The code above would construct a query: * <pre> * <code> * (filename:query) +(contents:query) -(description:query) * </code> * </pre> * * @param query Query string to parse * @param fields Fields to search on * @param flags Flags describing the fields * @param analyzer Analyzer to use * @throws ParseException if query parsing fails * @throws TokenMgrError if query parsing fails */ public static Query parse(String query, String[] fields, int[] flags, Analyzer analyzer) throws ParseException { BooleanQuery bQuery = new BooleanQuery(); for (int i = 0; i < fields.length; i++) { QueryParser qp = new QueryParser(fields[i], analyzer); qp.setDefaultOperator(operator); Query q = qp.parse(query); int flag = flags[i]; switch (flag) { case REQUIRED_FIELD: //bQuery.add(q, true, false); bQuery.add(q, BooleanClause.Occur.MUST); break; case PROHIBITED_FIELD: //bQuery.add(q, false, true); bQuery.add(q, BooleanClause.Occur.MUST_NOT); break; default: //bQuery.add(q, false, false); bQuery.add(q, BooleanClause.Occur.SHOULD); break; } } return bQuery; }
From source file:com.duroty.lucene.files.search.AdvancedQueryParser.java
License:Open Source License
/** * DOCUMENT ME!/*from www .j a v a 2s . c o m*/ * * @param queryFields DOCUMENT ME! * @param analyzer DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ParseException DOCUMENT ME! */ public static Query parseFlags(Hashtable queryFields, Analyzer analyzer) throws ParseException { if ((queryFields == null) || (queryFields.size() == 0)) { return null; } BooleanQuery bQuery = new BooleanQuery(); Query simpleQuery = null; int control = 0; String label = (String) queryFields.get(Field_label); if ((label != null) && !label.trim().equals("")) { control++; QueryParser parser = new QueryParser(Field_label, analyzer); parser.setDefaultOperator(Operator.AND); Query aux = parser.parse(escape(label)); simpleQuery = aux; bQuery.add(aux, BooleanClause.Occur.MUST); } if (control > 0) { if (control == 1) { return simpleQuery; } else { return bQuery; } } else { return null; } }
From source file:com.duroty.lucene.mail.search.FilterQueryParser.java
License:Open Source License
/** * DOCUMENT ME!/*from w ww .j a va2 s . co m*/ * * @param label DOCUMENT ME! * @param filter DOCUMENT ME! * @param analyzer DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ParseException DOCUMENT ME! */ public static Query parse(Filter[] filters, Analyzer analyzer) throws ParseException { if ((filters != null) && (filters.length > 1)) { BooleanQuery bQuery = new BooleanQuery(); for (int i = 0; i < filters.length; i++) { Query q = parse(filters[i], analyzer); if (q != null) { //bQuery.add(q, false, false); bQuery.add(q, BooleanClause.Occur.SHOULD); } } return bQuery; } else if ((filters != null) && (filters.length == 1)) { return parse(filters[0], analyzer); } return null; }
From source file:com.duroty.lucene.mail.search.SimpleQueryParser.java
License:Open Source License
/** * DOCUMENT ME!/*from ww w . j ava 2 s . c om*/ * * @param queryString DOCUMENT ME! * @param analyzer DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ParseException DOCUMENT ME! */ public static Query parse(String queryString, Analyzer analyzer) throws ParseException { queryString = " " + queryString.replaceAll("\\s*:\\s*", ":"); Query query = null; if (queryString.indexOf(':') == -1) { query = MultiFieldQueryParser.parse(QueryParser.escape(queryString), messageFields, messageFlags, analyzer); } else { if (queryString.indexOf("hasattachments:true") > -1) { queryString = queryString.replaceAll("hasattachments:true", "").trim(); BooleanQuery booleanQuery = new BooleanQuery(); if ((queryString != null) && (queryString.length() > 0)) { QueryParser parser = new QueryParser("", analyzer); parser.setDefaultOperator(Operator.AND); Query aux1 = parser.parse(queryString); booleanQuery.add(aux1, BooleanClause.Occur.MUST); parser = new QueryParser(Field_has_attachments, new KeywordAnalyzer()); parser.setDefaultOperator(Operator.AND); Query aux2 = parser.parse("hasattachments:true"); booleanQuery.add(aux2, BooleanClause.Occur.MUST); query = booleanQuery; } else { QueryParser parser = new QueryParser(Field_has_attachments, new KeywordAnalyzer()); parser.setDefaultOperator(Operator.AND); query = parser.parse("hasattachments:true"); } } else { QueryParser parser = new QueryParser("", analyzer); parser.setDefaultOperator(Operator.AND); query = parser.parse(queryString); } } return query; }
From source file:com.edgenius.wiki.search.service.AbstractSearchService.java
License:Open Source License
/** * /*from w w w .j a va2 s . c om*/ * @param keyword * @param advance * @return 2 elements: first is keyword query with advance query criteria. Last is highlight query. * @throws ParseException */ private Query[] createQuery(String keyword, String... advance) throws ParseException { //default value int advKeyword = 0; String space = null; int srcType = 0; long from = 0, to = 0; //group by space - need filter out some special type boolean groupBySpace = false; if (advance != null) { //parse all possible type for (String str : advance) { if (str.length() < 2) continue; if (str.charAt(0) == SearchService.ADV_KEYWORD_TYPE) advKeyword = NumberUtils.toInt(str.substring(1)); if (str.charAt(0) == SearchService.ADV_SPACE) space = str.substring(1); if (str.charAt(0) == SearchService.ADV_SOURCE_TYPES) srcType = NumberUtils.toInt(str.substring(1)); if (str.charAt(0) == SearchService.ADV_DATE_SCOPE) { String fromStr = str.substring(1); int sep = fromStr.indexOf(":"); if (sep != -1) { from = NumberUtils.toLong(fromStr.substring(0, sep)); to = NumberUtils.toLong(fromStr.substring(sep + 1)); if (from != 0 && to == 0) { //from: (to is missed) to = new Date().getTime(); } } else { from = NumberUtils.toLong(fromStr); to = new Date().getTime(); } } if (str.charAt(0) == SearchService.ADV_GROUP_BY && NumberUtils .toInt(Character.valueOf(str.charAt(1)).toString()) == SearchService.GROUP_SPACE) { groupBySpace = true; } } } keyword = QueryParser.escape(StringUtils.trimToEmpty(keyword)); QueryParser parser = new QueryParser(LuceneConfig.VERSION, FieldName.CONTENT, searcherFactory.getAnalyzer()); if (advKeyword == SearchService.KEYWORD_EXACT) keyword = "\"" + keyword + "\""; else if (advKeyword == SearchService.KEYWORD_ALL) { String[] words = keyword.split(" "); StringBuffer buf = new StringBuffer(); for (String word : words) { buf.append("+").append(word).append(" "); } keyword = buf.toString().trim(); } //highlight query on return result, could be null Query hlQuery = null; if (keyword.length() > 0) { //Lucene throw exception if keyword is empty hlQuery = parser.parse(keyword); } //date scope if (from != 0 && to != 0) { keyword += " [" + from + " TO " + to + "]"; } Query keyQuery = parser.parse(keyword); Query spaceQuery = null; //space scope if (!StringUtils.isBlank(space)) { //as here is not necessary to limit search type: as only page, comment, pageTag, attachment //has UNSEARCH_SPACE_UNIXNAME field, so the search type is already restrict these four types spaceQuery = new TermQuery(new Term(FieldName.UNSEARCH_SPACE_UNIXNAME, space.trim().toLowerCase())); } //type filter List<Query> typeQueries = null; if (srcType != 0) { typeQueries = new ArrayList<Query>(); TermQuery tq; if ((srcType & SearchService.INDEX_PAGE) > 0) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_PAGE + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_SPACE) > 0 && !groupBySpace) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_SPACE + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_COMMENT) > 0) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_COMMENT + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_ROLE) > 0 && !groupBySpace) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_ROLE + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_USER) > 0 && !groupBySpace) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_USER + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_TAGONPAGE) > 0) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_PAGE_TAG + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_TAGONSPACE) > 0 && !groupBySpace) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_SPACE_TAG + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_ATTACHMENT) > 0) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_ATTACHMENT + "")); typeQueries.add(tq); } if ((srcType & SearchService.INDEX_WIDGET) > 0 && !groupBySpace) { tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_WIDGET + "")); typeQueries.add(tq); } } BooleanQuery query = new BooleanQuery(); boolean queryIsEmpty = true; if (keyQuery != null) { queryIsEmpty = false; query.add(keyQuery, Occur.MUST); } if (spaceQuery != null) { queryIsEmpty = false; query.add(spaceQuery, Occur.MUST); } if (groupBySpace && (typeQueries == null || typeQueries.size() == 0)) { //users don't choose any special type, but sort by space, so it need give limitation on search type //so far - page, comment, attachment, tag on page are for Space type typeQueries = new ArrayList<Query>(); TermQuery tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_PAGE + "")); typeQueries.add(tq); tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_COMMENT + "")); typeQueries.add(tq); tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_COMMENT + "")); typeQueries.add(tq); tq = new TermQuery(new Term(FieldName.DOC_TYPE, SharedConstants.SEARCH_PAGE_TAG + "")); typeQueries.add(tq); } if (typeQueries != null && typeQueries.size() > 0) { BooleanQuery typeQuery = new BooleanQuery(); for (Query typeQ : typeQueries) { typeQuery.add(typeQ, Occur.SHOULD); } queryIsEmpty = false; query.add(typeQuery, Occur.MUST); } return new Query[] { queryIsEmpty ? null : query, hlQuery }; }
From source file:com.emc.query.bool.BoolQueryBuilder.java
License:Apache License
protected Query doToQuery() { BooleanQuery query = new BooleanQuery(); return null; }