Hi Doron,

   I m not sure I m implement your suggestion correctly.

   The way I did is I have 2 separate methods controlling by the check box.
I used basic search method for the first time and that will look up the
index from the directory. After I got the result, I will check the checkbox
and that will lead to 2nd method which the reader again from the index
directory and searcher search based on the reader. Next, I  m only implement
the codes that suggested by you. So, I m not sure I m doing the right thing
or not.

   I have attached the work that I done on below:

      public String search(String searchString) throws IOException,
Exception 
        {
                StringBuffer buff = new StringBuffer();
                String field = "";
                
                try
                {
                        reader = IndexReader.open(DsConstant.indexDir);
                        Searcher searcher = new IndexSearcher(reader);
                        Analyzer analyzer = new StandardAnalyzer();
                        QueryParser parser = new 
QueryParser(DsConstant.idxFileContent,
analyzer);
                        //Query query = parser.parse(searchString);
                        
                        String[] metaFields = field.split(":");
                        metaFields = new String[]{"contents", "companyId", 
"ownerId",
"createdBy", "docName",   "docDesc", "keywords", "docId", "docPropName"};
                        
                        for(int i = 0; i < metaFields.length; i++)
                        {
                                buff.append(metaFields[i] + ":" + searchString);
                                if(i != (metaFields.length-1))
                                {
                                        buff.append(" OR ");
                                }
                        }
                        
                        Query query = parser.parse(buff.toString());
                        query = query.rewrite(reader);
                        
                        System.out.println("query ::: " + query);
                        
                    searchHits = searcher.search(query);
                    
                    System.out.println("search hits is ::: " 
+searchHits.length());
                        
                        if(searchHits.length() > 0)
                        {
                                QueryScorer scorer = new QueryScorer(query);
                                Highlighter highlighter = new Highlighter(new 
SimpleHTMLFormatter("<span
style='background-color:yellow;  font-weight:bold;'>",
                                                                "</span>"), 
scorer);
                                
                                for(int i = 0; i < searchHits.length(); i++)
                                {
                                        Document doc = searchHits.doc(i);
                                        String text = 
doc.get(DsConstant.idxFileContent);
                                        TokenStream tokenstream =
analyzer.tokenStream(DsConstant.idxFileContent, new StringReader(text));
                                        //buff.append("<p> '" + 
DsConstant.userDir
                                        buff.append("!");
                                        buff.append("<p  " + 
searchHits.doc(i).get(DsConstant.idxPath) + " "
                                                        + 
searchHits.doc(i).get("docName") + " <br>");
                                        buff.append("score: " + 
searchHits.score(i) + "<br>");
                                        
buff.append(highlighter.getBestFragments(tokenstream, text, 3, "...")+
"</p>");
                                }
                                
                                //System.out.println("Folder path is ::: " 
+DsConstant.folderPath);
                                
                                searcher.close();
                        }
                        
                        System.out.println("Found "+searchHits.length()+" 
searchHits with query =
"+query);
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }
                
                return buff.toString();
                //return resultList;
        }
        
        public String refindSearchResult(String searchString1, String
searchString2) throws IOException, Exception 
        {
                System.out.println("inside search util - refind search result");
                
                IndexReader reader = null;
                StringBuffer buff = new StringBuffer();
                
                try
                {
                        reader = IndexReader.open(DsConstant.indexDir);
                        Searcher searcher = new IndexSearcher(reader);
                        Analyzer analyzer = new StandardAnalyzer();
                        QueryParser parser = new 
QueryParser(DsConstant.idxFileContent,
analyzer);
                        
                        Query query1 = parser.parse(searchString1);
                        filter = new QueryFilter(query1);
                        Query query2 = parser.parse(searchString2);
                        
                    searchHits = searcher.search(query2, filter);
                        
                        System.out.println("search hits is ::: " 
+searchHits.length());
                        
                        if(searchHits.length() > 0)
                        {
                                QueryScorer scorer = new QueryScorer(query2);
                                Highlighter highlighter = new Highlighter(new 
SimpleHTMLFormatter("<span
style='background-color:yellow;  font-weight:bold;'>",
                                                                "</span>"), 
scorer);
                                
                                for(int i = 0; i < searchHits.length(); i++)
                                {
                                        Document doc = searchHits.doc(i);
                                        String text = 
doc.get(DsConstant.idxFileContent);
                                        TokenStream tokenstream =
analyzer.tokenStream(DsConstant.idxFileContent, new StringReader(text));
                                        //buff.append("<p> '" + 
DsConstant.userDir
                                        buff.append("<p  " + 
searchHits.doc(i).get(DsConstant.idxPath) + " "
                                                        + 
searchHits.doc(i).get("docName") + " <br>");
                                        buff.append("score: " + 
searchHits.score(i) + "<br>");
                                        
buff.append(highlighter.getBestFragments(tokenstream, text, 3, "...")+
"</p>");
                                        buff.append("!").substring(i);
                                }
                                
                                searcher.close();
                        }
                        
                        System.out.println("Found "+searchHits.length()+" 
searchHits with query =
"+query2);
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }
                
                return buff.toString();
        }

   Please point out where I m done wrong and hopefully the right solution
that I can use.

   Thank you.

regards,
Wooi Meng
-- 
View this message in context: 
http://www.nabble.com/Filter-query-method-tf2586547.html#a7273997
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to