Example usage for org.apache.lucene.search SortField FIELD_SCORE

List of usage examples for org.apache.lucene.search SortField FIELD_SCORE

Introduction

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

Prototype

SortField FIELD_SCORE

To view the source code for org.apache.lucene.search SortField FIELD_SCORE.

Click Source Link

Document

Represents sorting by document score (relevance).

Usage

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;
}