public class Searcher {

        private int hitCounts = 0;
        private ResultDocument[] scoreDocs = null;
        public Searcher() {             
        }
        
        public void search1(String searchValue, String isArchive)
                        throws IllegalArgumentException, IOException, 
ParseException {

                String[] args = new String[2];
                ServletContext contxt =
org.apache.struts2.ServletActionContext.getServletContext();
                if(isArchive.equalsIgnoreCase("true")){
                args[0] = contxt.getRealPath("archiveindexes");
                }
                else{
                args[0] = contxt.getRealPath("indexes");
                }
                args[1] = searchValue;
                String indexDir = args[0];
                String q = args[1];

                search(indexDir, q);
        }

        public void search(String indexDir, String q) throws IOException,
                        ParseException {
                Directory dir = FSDirectory.open(new File(indexDir));
                IndexSearcher is = new IndexSearcher(dir);
                QueryParser parser1 = new QueryParser(Version.LUCENE_30, 
"contents",new
StandardAnalyzer(Version.LUCENE_30));
                Query query1 = parser1.parse(q + "*");
                long start1 = System.currentTimeMillis();
                TopDocs hits1 = is.search(query1, 20);          
                hitCounts = hits1.totalHits;
                hits1 = is.search(query1, hitCounts);
                long end1 = System.currentTimeMillis();
                System.err.println("Found " + hits1.totalHits + " document(s) 
(in "
                                + (end1 - start1) + " milliseconds) that 
matched query1 '" + q+ "':");
                
                int totalLength =  hits1.scoreDocs.length;
                scoreDocs = new ResultDocument[totalLength];
                int i=0;
                for (ScoreDoc scoreDoc1 : hits1.scoreDocs) {
                        Document doc = is.doc(scoreDoc1.doc);
                        ResultDocument resultDoc = new ResultDocument(doc);
                        scoreDocs[i++]=resultDoc;
                }
                is.close();
        }
        
        public int getHitCounts() {
                return hitCounts;
        }
        
        public ResultDocument[] getScoreDocs() {
                return scoreDocs;
        }
}


-----------Searching class----------------
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.infy.stateportal.portalsearch.search;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.lucene.queryParser.ParseException;

import com.infy.stateportal.portalsearch.search.ResultDocument;
import com.infy.stateportal.portalsearch.search.Searcher;
import com.opensymphony.xwork2.ActionSupport;

public class Searching extends ActionSupport {

        private static final long serialVersionUID = 1L;
        private String message;
    private String searchContent;
    private int start=0;
    private int end=0;
    private int current =0;
    private ResultDocument[] resultDocument = null;
    private ResultDocument[] pageResultDocument = null;
    private int hitCount=0;
    private int resultHitsPerPage = 10;

    public Searching() {
    }
    
    public void validate() {
                
        HttpServletRequest req =
org.apache.struts2.ServletActionContext.getRequest(); 
        if(req.getParameter("searchContent") !=null){
                setSearchContent(req.getParameter("searchContent").toString());
        }
        if (getSearchContent().length() == 0) {                     
                addFieldError("searchContent", "Search content is required");
        }          
    }

    public String execute() {
        try {    
                if(getSearchContent()==null || getSearchContent()=="" ||
(getSearchContent()!=null 
                                && getSearchContent().equalsIgnoreCase(""))) {
                        
                }
                HttpServletRequest req =
org.apache.struts2.ServletActionContext.getRequest(); 
                if(req.getParameter("current")!=null) {
                                
                        if(req.getParameter("start")!=null) {
                                //System.out.println("start 
"+req.getParameter("start"));
                                start = 
Integer.parseInt(req.getParameter("start"));
                        }
                        if(req.getParameter("end")!=null) {
                                //System.out.println("end 
"+req.getParameter("end"));
                                end = Integer.parseInt(req.getParameter("end"));
                        }
                        if(req.getParameter("current")!=null) {
                                //System.out.println("current 
"+req.getParameter("current"));
                                current = 
Integer.parseInt(req.getParameter("current"));
                        }
                        HttpSession session = req.getSession();                 
                        resultDocument =
(ResultDocument[])session.getAttribute("searchResult"); 
                        hitCount = (Integer)session.getAttribute("hitCount");
                        if(current >5) {
                                start = current -5;
                                end = ((current 
+5)<(getPageCount()))?(current+5):(getPageCount());                     
                        }
                        if(current<=5) {
                                start = 0;
                                end = (getPageCount()>10)?10:getPageCount();
                        }
                        //if(current )
                }
                else {
                        String isArchive = "";
                        if(req.getParameter("isArchive")!=null){
                                isArchive = 
(req.getParameter("isArchive")).toString();
                        }
                        Searcher searcher = new Searcher();
                                searcher.search1(getSearchContent(), isArchive);
                                //searcher.search(getSearchContent());
                                resultDocument = searcher.getScoreDocs();
                                hitCount = searcher.getHitCounts();
                                HttpSession session = req.getSession(true);
                                session.setAttribute("searchResult", 
resultDocument);
                                session.setAttribute("hitCount", hitCount);
                                end = getPageCount();
                                if(getPageCount()>10) {
                                        end = 10;
                                }                       
                }
                pageResultDocument = new ResultDocument[resultHitsPerPage];
                        int j=0;
                        for(int 
i=(current)*resultHitsPerPage;(i<resultDocument.length) &&
(j<resultHitsPerPage);i++) {
                                pageResultDocument[j++]=resultDocument[i];
                        }
                //System.out.println(" searcher.getHitCounts() 
"+getPageCount());
                //current++;
                        
                } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (ParseException e) {
                        e.printStackTrace();
                }
        setMessage("Hello " + getSearchContent());
        return "SUCCESS";
    }

    /**
     * @return the message
     */
    public String getMessage() {
        return message;
    }

    /**
     * @param message the message to set
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * @return the userName
     */
    public String getSearchContent() {
        return searchContent;
    }

    /**
     * @param userName the userName to set
     */
    public void setSearchContent(String searchContent) {
        this.searchContent = searchContent;
    }
    
    public int getHitCount() {
                return hitCount;
        }
        
        public ResultDocument[] getScoreDocs() {
                return this.pageResultDocument;
        }
        
        public int getStart() {
                return start;
        }
        
        public int getEnd() {
                return end;
        }
        
        private int getPageCount() {
                return
((hitCount%resultHitsPerPage)==0)?(hitCount/resultHitsPerPage):(hitCount/resultHitsPerPage)+1;
        }       
        
        public int getCurrent() {
                return current;
        }

}


--
View this message in context: 
http://lucene.472066.n3.nabble.com/Lucene-search-Concurrent-users-issue-If-more-than-300-users-are-using-at-a-time-search-results-are-gd-tp3414779p3415008.html
Sent from the Lucene - General mailing list archive at Nabble.com.

Reply via email to