List of usage examples for org.apache.lucene.search SortField FIELD_SCORE
SortField FIELD_SCORE
To view the source code for org.apache.lucene.search SortField FIELD_SCORE.
Click Source Link
From source file:SearchHelpDocs.java
License:Open Source License
/** * Default search, sort by score and date *//*from w ww . j ava 2s .c o m*/ private static Sort createSort() throws Exception { Sort sort = new Sort(); SortField fields[] = { SortField.FIELD_SCORE, new SortField("yyyymmdd", SortField.STRING, true) }; sort.setSort(fields); return sort; }
From source file:aos.lucene.search.advanced.FunctionQueryTest.java
License:Apache License
public void testRecency() throws Throwable { Directory dir = TestUtil.getBookIndexDirectory(); IndexReader r = DirectoryReader.open(dir); IndexSearcher s = new IndexSearcher(r); s.setDefaultFieldSortScoring(true, true); QueryParser parser = new QueryParser(Version.LUCENE_46, "contents", new StandardAnalyzer(Version.LUCENE_46)); Query q = parser.parse("java in action"); // #A Query q2 = new RecencyBoostingQuery(q, // #B 2.0, 2 * 365, "pubmonthAsDay"); Sort sort = new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField("title2", SortField.STRING) }); TopDocs hits = s.search(q2, null, 5, sort); for (int i = 0; i < hits.scoreDocs.length; i++) { Document doc = r.document(hits.scoreDocs[i].doc); LOGGER.info((1 + i) + ": " + doc.get("title") + ": pubmonth=" + doc.get("pubmonth") + " score=" + hits.scoreDocs[i].score); }//from www . j a v a2 s. c om s.close(); r.close(); dir.close(); }
From source file:aos.lucene.search.advanced.SortingExample.java
License:Apache License
public static void main(String[] args) throws Exception { Query allBooks = new MatchAllDocsQuery(); QueryParser parser = new QueryParser(Version.LUCENE_46, // "contents", // new StandardAnalyzer( // Version.LUCENE_46)); // BooleanQuery query = new BooleanQuery(); // query.add(allBooks, BooleanClause.Occur.SHOULD); // query.add(parser.parse("java OR action"), BooleanClause.Occur.SHOULD); // Directory directory = TestUtil.getBookIndexDirectory(); // SortingExample example = new SortingExample(directory); // example.displayResults(query, Sort.RELEVANCE); example.displayResults(query, Sort.INDEXORDER); example.displayResults(query, new Sort(new SortField("category", SortField.STRING))); example.displayResults(query, new Sort(new SortField("pubmonth", SortField.INT, true))); example.displayResults(query, new Sort(new SortField("category", SortField.STRING), SortField.FIELD_SCORE, new SortField("pubmonth", SortField.INT, true))); example.displayResults(query,// w w w. j a v a2 s .c o m new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField("category", SortField.STRING) })); directory.close(); }
From source file:com.bewsia.script.safe.lucene.SEntity.java
License:Open Source License
public SortField sortFieldScore() { return SortField.FIELD_SCORE; }
From source file:com.bloatit.data.search.FeatureSearch.java
License:Open Source License
@Override protected void prepareSearch() { enableFilter("searchFilter"); final Sort sort = new Sort(); switch (sortMethod) { case SORT_BY_CONTRIBUTION: sort.setSort(new SortField("contribution", SortField.FLOAT, true), new SortField("progress", SortField.FLOAT, true)); break;//from w ww . j a v a 2 s. c o m case SORT_BY_CREATION_DATE: sort.setSort(new SortField("creationDate", SortField.STRING, true), new SortField("popularity", SortField.INT, true)); break; case SORT_BY_EXPIRATION_DATE: sort.setSort(new SortField("selectedOffer.expirationDate", SortField.LONG, true), new SortField("popularity", SortField.INT, true)); break; case SORT_BY_POPULARITY: sort.setSort(new SortField("popularity", SortField.INT, true)); break; case SORT_BY_PROGRESS: sort.setSort(new SortField("featureState", SortField.STRING), new SortField("progress", SortField.FLOAT, true)); break; case SORT_BY_RELEVANCE: sort.setSort(SortField.FIELD_SCORE, new SortField("popularity", SortField.INT, true)); break; } setSort(sort); }
From source file:com.browseengine.bobo.test.BoboTestCase.java
License:Open Source License
public void testQueryWithScore() throws Exception { BrowseRequest br = new BrowseRequest(); QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "color", new StandardAnalyzer(Version.LUCENE_CURRENT)); br.setQuery(parser.parse("color:red OR shape:square")); br.setCount(10);/*from w ww. j a v a2s .c o m*/ br.setOffset(0); br.setSort(new SortField[] { SortField.FIELD_SCORE }); doTest(br, 4, null, new String[] { "1", "7", "2", "5" }); }
From source file:com.duroty.application.bookmark.manager.BookmarkManager.java
License:Open Source License
/** * DOCUMENT ME!/*from w w w .j a va2 s. c o m*/ * * @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 BookmarkException DOCUMENT ME! * @throws SearchException DOCUMENT ME! */ public SearchObj search(String repositoryName, String token, int page, int messagesByPage, int order, String orderType, boolean isNotebook) throws BookmarkException { String lucenePath = ""; if (!defaultLucenePath.endsWith(File.separator)) { lucenePath = defaultLucenePath + File.separator + repositoryName + File.separator + Constants.BOOKMARK_LUCENE_BOOKMARK; } else { lucenePath = defaultLucenePath + repositoryName + File.separator + Constants.BOOKMARK_LUCENE_BOOKMARK; } Searcher searcher = null; SearchObj searchObj = new SearchObj(); Highlighter highlighter = null; try { searcher = BookmarkIndexer.getSearcher(lucenePath); Query query = null; Hits hits = null; if (StringUtils.isBlank(token)) { if (isNotebook) { query = SimpleQueryParser.parse("notebook:true", new KeywordAnalyzer()); } else { query = new MatchAllDocsQuery(); } hits = searcher.search(query, new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField(Field_insert_date, SortField.STRING, true) })); } else { query = SimpleQueryParser.parse(token, analyzer); StringBuffer buffer = new StringBuffer(); if (isNotebook) { buffer.append("(" + query.toString() + ") AND "); QueryParser parser = new QueryParser(Field_notebook, new KeywordAnalyzer()); parser.setDefaultOperator(Operator.AND); Query aux = parser.parse(String.valueOf(true)); buffer.append("(" + aux.toString() + ") "); } if (buffer.length() > 0) { QueryParser parser = new QueryParser("", new WhitespaceAnalyzer()); query = parser.parse(buffer.toString()); } hits = searcher.search(query); } Date searchStart = new Date(); 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 bookmarks = new Vector(); for (int j = start; j < end; j++) { Document doc = hits.doc(j); if (doc != null) { LuceneBookmark luceneBookmark = new LuceneBookmark(doc); SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>", "</b>"); highlighter = new Highlighter(formatter, new QueryScorer(query)); highlighter.setTextFragmenter(new SimpleFragmenter(150)); BookmarkObj bookmarkObj = new BookmarkObj(); bookmarkObj.setCacheDate(luceneBookmark.getCacheDate()); bookmarkObj.setComments(luceneBookmark.getComments()); bookmarkObj.setContents(luceneBookmark.getCotents()); bookmarkObj.setDepth(luceneBookmark.getDepth()); bookmarkObj.setFlagged(luceneBookmark.isFlagged()); bookmarkObj.setIdint(luceneBookmark.getIdint()); bookmarkObj.setInsertDate(luceneBookmark.getInsertDate()); bookmarkObj.setKeywords(luceneBookmark.getKeywords()); bookmarkObj.setNotebook(luceneBookmark.isNotebook()); bookmarkObj.setParent(Long.parseLong(luceneBookmark.getParent())); bookmarkObj.setTitle(luceneBookmark.getTitle()); bookmarkObj.setTitleHighlight(luceneBookmark.getTitle()); bookmarkObj.setUrl(luceneBookmark.getUrl()); String contents = luceneBookmark.getCotents(); String hcontents = null; if ((contents != null) && (!contents.trim().equals(""))) { contents = contents.replaceAll("\\s+", " "); TokenStream tokenStream = analyzer.tokenStream(Field_contents, new StringReader(contents)); hcontents = highlighter.getBestFragment(tokenStream, contents); if (hcontents != null) { contents = hcontents; } else { contents = null; } } bookmarkObj.setContentsHighlight(contents); String title = luceneBookmark.getTitle(); String htitle = null; if ((title != null) && (!title.trim().equals(""))) { title = title.replaceAll("\\s+", " "); TokenStream tokenStream = analyzer.tokenStream(Field_title, new StringReader(title)); htitle = highlighter.getBestFragment(tokenStream, title); if (htitle != null) { title = htitle; } } bookmarkObj.setTitleHighlight(title); bookmarks.addElement(bookmarkObj); } } searchObj.setHits(hitsLength); searchObj.setTime(time); searchObj.setBookmarks(bookmarks); } catch (Exception ex) { throw new SearchException(ex); } finally { } return searchObj; }
From source file:com.duroty.application.files.manager.SearchManager.java
License:Open Source License
/** * DOCUMENT ME!/* w ww . ja v a 2 s . 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.application.files.manager.SearchManager.java
License:Open Source License
public SearchObj advanced(Session hsession, String repositoryName, AdvancedObj advancedObj, 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 {//from www. jav a2 s. co m 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); if (!StringUtils.isBlank(advancedObj.getSubject())) { advancedObj.setSubject("Files-System"); } Query query = AdvancedQueryParser.parseMessages(advancedObj, analyzer); ; /*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 = AdvancedQueryParser.parseMessages(advancedObj, analyzer); booleanQuery.add(aux2, BooleanClause.Occur.MUST); query = booleanQuery;*/ 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; } int label = 0; if (advancedObj.getLabel() != null) { label = advancedObj.getLabel().getIdint(); } 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.application.mail.manager.SearchManager.java
License:Open Source License
/** * DOCUMENT ME!/*from www . ja v a 2 s . c o m*/ * * @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 MailException DOCUMENT ME! */ public SearchObj simple(Session hsession, String repositoryName, String token, int page, int messagesByPage, int order, String orderType, boolean excludeTrash) throws MailException { 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 = 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_ADDRESS: sort = new Sort(new SortField[] { new SortField(Field_from, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; case ORDER_BY_SIZE: sort = new Sort(new SortField[] { new SortField(Field_size, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; case ORDER_BY_SUBJECT: sort = new Sort(new SortField[] { new SortField(Field_subject, 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; case ORDER_BY_UNREAD: sort = new Sort(new SortField[] { new SortField(Field_recent, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; case ORDER_BY_IMPORTANT: sort = new Sort(new SortField[] { new SortField(Field_flagged, SortField.STRING, reverse), SortField.FIELD_SCORE }); break; default: sort = new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField(Field_lastDate, SortField.STRING, true) }); break; } ChainedFilter chained = null; if (excludeTrash) { chained = getChainedFilter(hsession, repositoryName, 0, null); } 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 messages = 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) { MessageObj obj = new MessageObj(message.getMesName()); obj.setBox(message.getMesBox()); obj.setFrom(message.getMesFrom()); if ((message.getAttachments() != null) && (message.getAttachments().size() > 0)) { obj.setHasAttachment(true); } else { obj.setHasAttachment(false); } int size = message.getMesSize(); size /= 1024; if (size > 1024) { size /= 1024; obj.setSize(size + " MB"); } else { obj.setSize(((size > 0) ? (size + "") : "<1") + " kB"); } if (message.getMesBox().equals(folderSent)) { try { obj.setEmail(message.getMesTo()); } catch (Exception e) { obj.setEmail("unknown to"); } } else { obj.setEmail(message.getMesFrom()); } 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)) && (calendar.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH))) { obj.setDateStr(formatter1.format(calendar2.getTime())); } else { obj.setDateStr(formatter3.format(calendar2.getTime())); } } obj.setDate(date); if (message.getLabMeses() != null) { Iterator it = message.getLabMeses().iterator(); StringBuffer buff = new StringBuffer(); while (it.hasNext()) { if (buff.length() > 0) { buff.append(", "); } LabMes labMes = (LabMes) it.next(); buff.append(labMes.getId().getLabel().getLabName()); } obj.setLabel(buff.toString()); } try { obj.setSubject(message.getMesSubject()); } catch (Exception ex) { obj.setSubject("no subject"); } if (message.isMesFlagged()) { obj.setFlagged(true); } else { obj.setFlagged(false); } if (message.isMesRecent()) { obj.setRecent(true); } else { obj.setRecent(false); } String priority = "normal"; if (MessageUtilities.isHighPriority(message.getMesHeaders())) { priority = "high"; } else if (MessageUtilities.isLowPriority(message.getMesHeaders())) { priority = "low"; } obj.setPriority(priority); messages.addElement(obj); } } } searchObj.setHits(hitsLength); searchObj.setTime(time); searchObj.setMessages(messages); } catch (Exception ex) { throw new MailException(ex); } finally { GeneralOperations.closeHibernateSession(hsession); } return searchObj; }