Please suggest how to use the different analyse to accomodate number and alphanumeric search

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Please suggest how to use the different analyse to accomodate number and alphanumeric search

Gaurav Srivastava
How to search numbers using Lucene API
I am using a demo application so as to search the documents but when i
search the numbers or alphanumeric text it appends an empty space and no
hits are returned any help would be appreciated
i am developing a new serach engine like Google .Currently it uses Mysql
and we run query to get the search results

Currently i am using the simple demo application with the following code
for results.jsp.

*
<%@ page import = "  javax.servlet.*, javax.servlet.http.*, java.io.*,
org.apache.lucene.analysis.*, org.apache.lucene.document.*,
org.apache.lucene.index.*, org.apache.lucene.search.*,
org.apache.lucene.queryParser.*, org.apache.lucene.demo.*,
org.apache.lucene.demo.html.Entities, java.net.URLEncoder" %>
<%@ page  import = "pran_enterprises.*"%>
<%@ page  import = "java.util.*"%>
<%@ page  import = "java.sql.*"%>
<%@ page  import = "java.io.*"%>
<%@ include file="pe_declarations.jsp"%>
<%!
public String escapeHTML(String s) {
  s = s.replaceAll("&", "&amp;");
  s = s.replaceAll("<", "&lt;");
  s = s.replaceAll(">", "&gt;");
  s = s.replaceAll("\"", "&quot;");
  s = s.replaceAll("'", "&apos;");
  return s;
}
%>
<%@include file="header.jsp"%>
<link rel="stylesheet" type="text/css" href="/images/wayback.css">
<%
   //RSS_Frame Code
   String rowid = "";
   String urlString = "";
   String domain_name = "";
   String modified = "";
   String sender = "";
   userid = "";
   String hotWord = "";
   int numRecords = 0;
   LinkedHashMap htFields = new LinkedHashMap();
   LinkedHashMap domain_name_map = new LinkedHashMap();
   LinkedHashMap domainNamessMap = new LinkedHashMap();
   ResultSet tempRset = null;  
   String linkdata = "";
   String hyperdata = "";
   String senderName = "";
   String createdDate = null;  
   String co_js   = "onChange=\"company_select();\" size=8 multiple";
   int id = 0;
   String and = "";
   String fordatabasequery="";
   String includeDomainNameinSearch ="";
   boolean isDate = false;
   boolean isSocialNetwork = false;
   Vector  rowid_vector = new Vector();
   i = 0;
     
       htQueryString = peHttp.parseQueryString( request
);                      
       LinkedHashMap columnInrssSearch = new LinkedHashMap();
       columnInrssSearch.clear();
       columnInrssSearch.put("searchText" ,peUtil.obj2str(
htQueryString.get("matchword") ));
       columnInrssSearch.put("userid" ,pUDB.getUserID() );
       String match = (String)htQueryString.get("matchword");
       if (peUtil.isNullString(match))
               columnInrssSearch.put("rowid" ,peUDB.genRowID());
           else
               columnInrssSearch.put("rowid" ,peEncryption.md5(match));
       columnInrssSearch.put("beaconid" ,new peBeacons( request,
response ).getBeaconID());
       columnInrssSearch.put("modified" ,pUDB.db_datetime());
       //insert into rss_searches
       pUDB.insert("rss_searches",columnInrssSearch);
       //out.println( peJavaScript.opentag() );      
       //out.println("alert(parent.parent.parent.location);");
       //out.println("parent.parent.parent.location.refresh();");
       //out.println( peJavaScript.closetag() );
       if( jbConstants.debug > 0 )
       {
         peLogger.dbg  ( "jbSearchRSS: htQueryString is " );
         peLogger.dbgln( htQueryString.toString() );
       }
      keyword = peUtil.obj2str( htQueryString.get("matchword") );
      String startDate = peUtil.getDateTime("start_date", htQueryString) ;
      String endDate = peUtil.getDateTime("end_date", htQueryString)
;        
      String domainnames  = peUtil.obj2str(
htQueryString.get("domain_name") );
      if (    domainnames != null)
      {
          LinkedHashMap domainValues = new LinkedHashMap();              
          domainNamessMap.clear();
          %>
          <%@ include file="prepareList.jsp"%>    
          <%
          domain_vector.clear();
          domain_vector = peUtil.splitOnComma( domainnames );
          includeDomainNameinSearch = "";
          for( int countDomain=0; countDomain < domain_vector.size();
countDomain++ )
          {
             String domain = peUtil.obj2str(
domain_vector.elementAt(countDomain) );
             if (domain_vector.size() == 1)
                 includeDomainNameinSearch = includeDomainNameinSearch +
"(" + domain_name_map.get(domain) + ")";
             else if(countDomain == 0)      
                 includeDomainNameinSearch = includeDomainNameinSearch +
"(" + domain_name_map.get(domain) + " OR " ;
             else if (countDomain + 1 == domain_vector.size())
                 includeDomainNameinSearch = includeDomainNameinSearch  
+  domain_name_map.get(domain) + ")";  
             else        
                  includeDomainNameinSearch = includeDomainNameinSearch  
+ domain_name_map.get(domain) + " OR ";
          }          
          }              
           
      String where = "";    
      //get the emails of the friends in the social network of current user
      htWhereClause.clear();
      htColumns.clear();
      htWhereClause.put("userid", pUDB.getUserID());
      htColumns.put("friendsemailid", "1");
     
      rset = pUDB.select2( "socialnetwork", htColumns, htWhereClause );
      while(rset.next())
      {
          rowid_vector.addElement(rset.getString("friendsemailid"));
         
      }      
      //get the userid of the friends in the social network of current
user if  they are registered
      htColumns.clear();
      htWhereClause.clear();
      htColumns.put("userid", "1");
      htWhereClause.put( "email", "[in]"+peUtil.vector2str(rowid_vector) );
      rset = pUDB.select2( "users", htColumns, htWhereClause );    
      String includeSocialNetworkInSearch = "";
      boolean onlyOnce = true;
      while(rset!= null && rset.next())
      {
          if (onlyOnce)
          {
            includeSocialNetworkInSearch = includeSocialNetworkInSearch
+ "(" + rset.getString("userid") + " OR "  ;        
            onlyOnce = false;
          }
          else
            includeSocialNetworkInSearch = includeSocialNetworkInSearch  
+ rset.getString("userid") + " OR "  ;                    
      }    
      if (includeSocialNetworkInSearch.length() > 1)
          includeSocialNetworkInSearch =
includeSocialNetworkInSearch.substring(0,
includeSocialNetworkInSearch.lastIndexOf(" OR "))  + ")";
           
      if(htQueryString.get("search_all")!= null &&
htQueryString.get("search_all").equals("Search All Feeds"))
      {
      }
      else if(htQueryString.get("search_all") != null &&
htQueryString.get("search_all").equals("Search My Social Network") &&
includeSocialNetworkInSearch.trim().length() > 1)
      {
         and = and + includeSocialNetworkInSearch;
         isSocialNetwork = true;
           
      }
      else if(htQueryString.get("search_all") != null &&
htQueryString.get("search_all").equals("Search My Feeds"))
      {
         and = and + pUDB.getUserID();            
      }    
         
      if( !(startDate.trim().equals("00:00:00") ||
endDate.trim().equals("00:00:00")) )
      {
            if(includeSocialNetworkInSearch != null &&
includeSocialNetworkInSearch.length() > 1)    
                and = and + " AND " + startDate + " AND " +  endDate ;
            else
              and = and + startDate + " AND " +  endDate ;
          isDate = true;
      }  
      if( !peUtil.isNullString(includeDomainNameinSearch))
      {
          if (includeDomainNameinSearch.length() > 1)
              and = and + " AND " +    includeDomainNameinSearch;    
               
      }      
%>
<%
//start of original query.jsp file
        boolean error = false;                  //used to control flow
for error messages
        String indexName = indexLocation;       //local copy of the
configuration variable
        IndexSearcher searcher = null;          //the searcher used to
open/search the index
        Query query = null;                     //the Query created by
the QueryParser
        Hits hits = null;                       //the search results
        int startindex = 0;                     //the first index
displayed on this page
        int maxpage    = 50;                    //the maximum items
displayed on this page
        String queryString = null;              //the query entered in
the previous page
        String startVal    = null;              //string version of
startindex
        String maxresults  = null;              //string version of maxpage
        int thispage = 0;                       //used for the for/next
either maxpage or
                                                //hits.length() -
startindex - whichever is
                                                //less

        try {
          searcher = new IndexSearcher(indexName);      //create an
indexSearcher for our page
                                                        //NOTE: this
operation is slow for large
                                                        //indices (much
slower than the search itself)
                                                        //so you might
want to keep an IndexSearcher
                                                        //open
                                                       
        } catch (Exception e) {                         //any error that
happens is probably due
                                                        //to a
permission problem or non-existant
                                                        //or otherwise
corrupt index
%>
                <p>ERROR opening the Index - contact sysadmin!</p>
                <p>Error message: <%=escapeHTML(e.getMessage())%></p>  
<%                error = true;                                  //don't
do anything up to the footer
        }
%>
<%
       if (error == false) {                                          
//did we open the index?
                queryString = request.getParameter("matchword");
                hotWord = queryString;
                //add the conditions
                if (isSocialNetwork || isDate)
                    queryString = queryString  + " AND " + and;
                else
                    queryString = queryString  + and;
                                     
               out.println("QueryString" + queryString);
                //out.println (queryString);           //get the search
criteria
                startVal    = request.getParameter("startat");        
//get the start index
                maxresults  = request.getParameter("maxresults");      
//get max results per page
                try {
                        maxpage    = Integer.parseInt(maxresults);    
//parse the max results first
                        startindex = Integer.parseInt(startVal);      
//then the start index
                } catch (Exception e) { } //we don't care if something
happens we'll just start at 0
                                          //or end at 50

               

                if (queryString == null)
                    queryString = "Search";
                        //throw new ServletException("no query "+      
//if you don't have a query then
                                                 //  "specified");      
//you probably played on the
                                                                     
//query string so you get the
                                                                     
//treatment

                Analyzer analyzer = new StopAnalyzer();              
//construct our usual analyzer
                try {
                        query = new
QueryParser("contents",analyzer).parse(queryString);  //parse the
                        out.println(query.toString());
                } catch (Exception e) {                          //query
and construct the Query
                                                                     
//object
                                                                     
//if it's just "operator error"
                                                                     
//send them a nice error HTML
                                                                     
                out.println(jbConstants.err_begin );
                out.println( "No matches found" );              
                out.println( jbConstants.err_end );                
                error = true;                                        
//don't bother with the rest of
                                                                     
//the page
                }
        }
%>
<%
        if (error == false && searcher != null) {                     //
if we've had no errors
                                                                      //
searcher != null was to handle
                                                                      //
a weird compilation bug
                thispage = maxpage;                                   //
default last element to maxpage
                hits = searcher.search(query);
                //out.println("hits" + hits);// run the query
                if (hits.length() == 0) {                             //
if we got no results tell the user
                out.println(jbConstants.err_begin );
                out.println( "No matches found" );              
                out.println( jbConstants.err_end );                
                error = true;                                        //
don't bother with the rest of the
                                                                     // page
                }
        }

        if (error == false && searcher != null) {                  
%>
                <table width="700">
                <th>Title</th>
                <th>Url</th>
                <th>Created</th>              
<%
                if ((startindex + maxpage) > hits.length()) {
                        thispage = hits.length() - startindex;      //
set the max index to maxpage or last
                }                                                   //
actual search result whichever is less
                numRecords = thispage + startindex;              
                for (i = startindex; i < (thispage + startindex); i++)
{  // for each element
%>
                <tr id="<%=i%>" bgColor='#F6F6F6'
onClick="changeColor(this);parent.frames[1].Escape('<%=rowid%>','<%=hotWord%>');">
<%
                        Document doc = hits.doc(i);                    
//get the next document
                        String doctitle = doc.get("title");            
//get its title
                        url = doc.get("url");                   //get
its url field
                        if ((doctitle == null) || doctitle.equals(""))
//use the url if it has no title
                                doctitle = url;
                        String summary = doc.get("summary");
                        StringTokenizer st = new
StringTokenizer(summary.substring(25, summary.length()), "###");
                        while(st.hasMoreTokens())
                        {
                            sender = st.nextToken();
                            rowid = st.nextToken();
                            urlString = st.nextToken();
                            modified = st.nextToken();
                            domain_name = st.nextToken();
                            userid =
st.nextToken();                          
                            rowid = rowid.trim();
                        }
                       // out.println("sender" + sender + "rowid" +
rowid + "urlString" + urlString + "modified" + modified + "domain_name"
+ domain_name + "userid" + userid);
                       
                       
                       
                       
                                                                       
//then output!
%>
                        <td   width="280" class="fontClass"  
color="#ffffff">
                          <a id=<%=i%>   href=
"javascript:Escape('<%=rowid%>','<%=hotWord%>');"  target="bot"">
                          <div id="<%="div" + i%>"><%=doctitle%></div></a>
                          </td>                          
                        <%if (sender == null ||
sender.trim().equals("null"))
                           {                        
                    %>  
                          <td  width="280" class="fontClass"
 ><%=urlString%></td>
                    <%
                           }
                           else
                           {                              
                    %>
                       <td   width="280" class="fontClass"  
 ><%=sender%></td>
                    <%
                            }
                    %>  
                        <td  width="140" class="fontClass">
                           <%=modified.substring(0,10)%></td>
                </tr>
                <div type="hidden" id="<%="divv" + i%>"
style="display:none"><%=rowid%></div>
<%
                }
%>
<%                if ( (startindex + maxpage) < hits.length()) {   //if
there are more results...display
                                                                   //the
more link

                        String moreurl="results.jsp?query=" +
                                       URLEncoder.encode(queryString) +  
//construct the "more" link
                                       "&amp;maxresults=" + maxpage +
                                       "&amp;startat=" + (startindex +
maxpage);
%>
                <tr>
                        <td></td><td><a href="<%=moreurl%>">More
Results>></a></td>
                </tr>
<%
                }
%>
                </table>

<%       }                                            //then include our
footer.
         if (searcher != null)
                searcher.close();
%>

<SCRIPT LANGUAGE="JavaScript">
function changeColor(currentHref)
{
    for (var id = 0; id <=<%=numRecords - 1%>; id++)
    {  
    if (id != currentHref.id)
        document.getElementById(id).bgColor='#F6F6F6';
    else
        document.getElementById(id).bgColor='#9E9C91';
    }
}
</script>
     



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Please suggest how to use the different analyse to accomodate number and alphanumeric search

Erick Erickson
I think you'd figure it all out if you just printed out the parsed query
with toString();

And have you looked at your index with Luke to see what you've
actually stored? And perhaps queried with Luke which, among
other things, will show you the query as parsed by various
analyzers? If you don't have a copy of luke, you really should get one.

From the javadoc for StopAnalyzer
Filters LetterTokenizer with LowerCaseFilter and StopFilter.

which implies that all digit characters are removed from your
query string.

Best
Erick

P.S. It's a good idea to take the time to post only the relevant
code if possible so folks can focus on the lucene part of your
code rather than having to wade through all of it. Of course, it's
often difficult to determine how much is enough....

On 3/14/07, Gaurav Srivastava <[hidden email]> wrote:

>
> How to search numbers using Lucene API
> I am using a demo application so as to search the documents but when i
> search the numbers or alphanumeric text it appends an empty space and no
> hits are returned any help would be appreciated
> i am developing a new serach engine like Google .Currently it uses Mysql
> and we run query to get the search results
>
> Currently i am using the simple demo application with the following code
> for results.jsp.
>
> *
> <%@ page import = "  javax.servlet.*, javax.servlet.http.*, java.io.*,
> org.apache.lucene.analysis.*, org.apache.lucene.document.*,
> org.apache.lucene.index.*, org.apache.lucene.search.*,
> org.apache.lucene.queryParser.*, org.apache.lucene.demo.*,
> org.apache.lucene.demo.html.Entities, java.net.URLEncoder" %>
> <%@ page  import = "pran_enterprises.*"%>
> <%@ page  import = "java.util.*"%>
> <%@ page  import = "java.sql.*"%>
> <%@ page  import = "java.io.*"%>
> <%@ include file="pe_declarations.jsp"%>
> <%!
> public String escapeHTML(String s) {
>   s = s.replaceAll("&", "&amp;");
>   s = s.replaceAll("<", "&lt;");
>   s = s.replaceAll(">", "&gt;");
>   s = s.replaceAll("\"", "&quot;");
>   s = s.replaceAll("'", "&apos;");
>   return s;
> }
> %>
> <%@include file="header.jsp"%>
> <link rel="stylesheet" type="text/css" href="/images/wayback.css">
> <%
>    //RSS_Frame Code
>    String rowid = "";
>    String urlString = "";
>    String domain_name = "";
>    String modified = "";
>    String sender = "";
>    userid = "";
>    String hotWord = "";
>    int numRecords = 0;
>    LinkedHashMap htFields = new LinkedHashMap();
>    LinkedHashMap domain_name_map = new LinkedHashMap();
>    LinkedHashMap domainNamessMap = new LinkedHashMap();
>    ResultSet tempRset = null;
>    String linkdata = "";
>    String hyperdata = "";
>    String senderName = "";
>    String createdDate = null;
>    String co_js   = "onChange=\"company_select();\" size=8 multiple";
>    int id = 0;
>    String and = "";
>    String fordatabasequery="";
>    String includeDomainNameinSearch ="";
>    boolean isDate = false;
>    boolean isSocialNetwork = false;
>    Vector  rowid_vector = new Vector();
>    i = 0;
>
>        htQueryString = peHttp.parseQueryString( request
> );
>        LinkedHashMap columnInrssSearch = new LinkedHashMap();
>        columnInrssSearch.clear();
>        columnInrssSearch.put("searchText" ,peUtil.obj2str(
> htQueryString.get("matchword") ));
>        columnInrssSearch.put("userid" ,pUDB.getUserID() );
>        String match = (String)htQueryString.get("matchword");
>        if (peUtil.isNullString(match))
>                columnInrssSearch.put("rowid" ,peUDB.genRowID());
>            else
>                columnInrssSearch.put("rowid" ,peEncryption.md5(match));
>        columnInrssSearch.put("beaconid" ,new peBeacons( request,
> response ).getBeaconID());
>        columnInrssSearch.put("modified" ,pUDB.db_datetime());
>        //insert into rss_searches
>        pUDB.insert("rss_searches",columnInrssSearch);
>        //out.println( peJavaScript.opentag() );
>        //out.println("alert(parent.parent.parent.location);");
>        //out.println("parent.parent.parent.location.refresh();");
>        //out.println( peJavaScript.closetag() );
>        if( jbConstants.debug > 0 )
>        {
>          peLogger.dbg  ( "jbSearchRSS: htQueryString is " );
>          peLogger.dbgln( htQueryString.toString() );
>        }
>       keyword = peUtil.obj2str( htQueryString.get("matchword") );
>       String startDate = peUtil.getDateTime("start_date", htQueryString) ;
>       String endDate = peUtil.getDateTime("end_date", htQueryString)
> ;
>       String domainnames  = peUtil.obj2str(
> htQueryString.get("domain_name") );
>       if (    domainnames != null)
>       {
>           LinkedHashMap domainValues = new LinkedHashMap();
>           domainNamessMap.clear();
>           %>
>           <%@ include file="prepareList.jsp"%>
>           <%
>           domain_vector.clear();
>           domain_vector = peUtil.splitOnComma( domainnames );
>           includeDomainNameinSearch = "";
>           for( int countDomain=0; countDomain < domain_vector.size();
> countDomain++ )
>           {
>              String domain = peUtil.obj2str(
> domain_vector.elementAt(countDomain) );
>              if (domain_vector.size() == 1)
>                  includeDomainNameinSearch = includeDomainNameinSearch +
> "(" + domain_name_map.get(domain) + ")";
>              else if(countDomain == 0)
>                  includeDomainNameinSearch = includeDomainNameinSearch +
> "(" + domain_name_map.get(domain) + " OR " ;
>              else if (countDomain + 1 == domain_vector.size())
>                  includeDomainNameinSearch = includeDomainNameinSearch
> +  domain_name_map.get(domain) + ")";
>              else
>                   includeDomainNameinSearch = includeDomainNameinSearch
> + domain_name_map.get(domain) + " OR ";
>           }
>           }
>
>       String where = "";
>       //get the emails of the friends in the social network of current
> user
>       htWhereClause.clear();
>       htColumns.clear();
>       htWhereClause.put("userid", pUDB.getUserID());
>       htColumns.put("friendsemailid", "1");
>
>       rset = pUDB.select2( "socialnetwork", htColumns, htWhereClause );
>       while(rset.next())
>       {
>           rowid_vector.addElement(rset.getString("friendsemailid"));
>
>       }
>       //get the userid of the friends in the social network of current
> user if  they are registered
>       htColumns.clear();
>       htWhereClause.clear();
>       htColumns.put("userid", "1");
>       htWhereClause.put( "email", "[in]"+peUtil.vector2str(rowid_vector)
> );
>       rset = pUDB.select2( "users", htColumns, htWhereClause );
>       String includeSocialNetworkInSearch = "";
>       boolean onlyOnce = true;
>       while(rset!= null && rset.next())
>       {
>           if (onlyOnce)
>           {
>             includeSocialNetworkInSearch = includeSocialNetworkInSearch
> + "(" + rset.getString("userid") + " OR "  ;
>             onlyOnce = false;
>           }
>           else
>             includeSocialNetworkInSearch = includeSocialNetworkInSearch
> + rset.getString("userid") + " OR "  ;
>       }
>       if (includeSocialNetworkInSearch.length() > 1)
>           includeSocialNetworkInSearch =
> includeSocialNetworkInSearch.substring(0,
> includeSocialNetworkInSearch.lastIndexOf(" OR "))  + ")";
>
>       if(htQueryString.get("search_all")!= null &&
> htQueryString.get("search_all").equals("Search All Feeds"))
>       {
>       }
>       else if(htQueryString.get("search_all") != null &&
> htQueryString.get("search_all").equals("Search My Social Network") &&
> includeSocialNetworkInSearch.trim().length() > 1)
>       {
>          and = and + includeSocialNetworkInSearch;
>          isSocialNetwork = true;
>
>       }
>       else if(htQueryString.get("search_all") != null &&
> htQueryString.get("search_all").equals("Search My Feeds"))
>       {
>          and = and + pUDB.getUserID();
>       }
>
>       if( !(startDate.trim().equals("00:00:00") ||
> endDate.trim().equals("00:00:00")) )
>       {
>             if(includeSocialNetworkInSearch != null &&
> includeSocialNetworkInSearch.length() > 1)
>                 and = and + " AND " + startDate + " AND " +  endDate ;
>             else
>               and = and + startDate + " AND " +  endDate ;
>           isDate = true;
>       }
>       if( !peUtil.isNullString(includeDomainNameinSearch))
>       {
>           if (includeDomainNameinSearch.length() > 1)
>               and = and + " AND " +    includeDomainNameinSearch;
>
>       }
> %>
> <%
> //start of original query.jsp file
>         boolean error = false;                  //used to control flow
> for error messages
>         String indexName = indexLocation;       //local copy of the
> configuration variable
>         IndexSearcher searcher = null;          //the searcher used to
> open/search the index
>         Query query = null;                     //the Query created by
> the QueryParser
>         Hits hits = null;                       //the search results
>         int startindex = 0;                     //the first index
> displayed on this page
>         int maxpage    = 50;                    //the maximum items
> displayed on this page
>         String queryString = null;              //the query entered in
> the previous page
>         String startVal    = null;              //string version of
> startindex
>         String maxresults  = null;              //string version of
> maxpage
>         int thispage = 0;                       //used for the for/next
> either maxpage or
>                                                 //hits.length() -
> startindex - whichever is
>                                                 //less
>
>         try {
>           searcher = new IndexSearcher(indexName);      //create an
> indexSearcher for our page
>                                                         //NOTE: this
> operation is slow for large
>                                                         //indices (much
> slower than the search itself)
>                                                         //so you might
> want to keep an IndexSearcher
>                                                         //open
>
>         } catch (Exception e) {                         //any error that
> happens is probably due
>                                                         //to a
> permission problem or non-existant
>                                                         //or otherwise
> corrupt index
> %>
>                 <p>ERROR opening the Index - contact sysadmin!</p>
>                 <p>Error message: <%=escapeHTML(e.getMessage())%></p>
> <%                error = true;                                  //don't
> do anything up to the footer
>         }
> %>
> <%
>        if (error == false) {
> //did we open the index?
>                 queryString = request.getParameter("matchword");
>                 hotWord = queryString;
>                 //add the conditions
>                 if (isSocialNetwork || isDate)
>                     queryString = queryString  + " AND " + and;
>                 else
>                     queryString = queryString  + and;
>
>                out.println("QueryString" + queryString);
>                 //out.println (queryString);           //get the search
> criteria
>                 startVal    = request.getParameter("startat");
> //get the start index
>                 maxresults  = request.getParameter("maxresults");
> //get max results per page
>                 try {
>                         maxpage    = Integer.parseInt(maxresults);
> //parse the max results first
>                         startindex = Integer.parseInt(startVal);
> //then the start index
>                 } catch (Exception e) { } //we don't care if something
> happens we'll just start at 0
>                                           //or end at 50
>
>
>
>                 if (queryString == null)
>                     queryString = "Search";
>                         //throw new ServletException("no query "+
> //if you don't have a query then
>                                                  //  "specified");
> //you probably played on the
>
> //query string so you get the
>
> //treatment
>
>                 Analyzer analyzer = new StopAnalyzer();
> //construct our usual analyzer
>                 try {
>                         query = new
> QueryParser("contents",analyzer).parse(queryString);  //parse the
>                         out.println(query.toString());
>                 } catch (Exception e) {                          //query
> and construct the Query
>
> //object
>
> //if it's just "operator error"
>
> //send them a nice error HTML
>
>                 out.println(jbConstants.err_begin );
>                 out.println( "No matches found" );
>                 out.println( jbConstants.err_end );
>                 error = true;
> //don't bother with the rest of
>
> //the page
>                 }
>         }
> %>
> <%
>         if (error == false && searcher != null) {                     //
> if we've had no errors
>                                                                       //
> searcher != null was to handle
>                                                                       //
> a weird compilation bug
>                 thispage = maxpage;                                   //
> default last element to maxpage
>                 hits = searcher.search(query);
>                 //out.println("hits" + hits);// run the query
>                 if (hits.length() == 0) {                             //
> if we got no results tell the user
>                 out.println(jbConstants.err_begin );
>                 out.println( "No matches found" );
>                 out.println( jbConstants.err_end );
>                 error = true;                                        //
> don't bother with the rest of the
>                                                                      //
> page
>                 }
>         }
>
>         if (error == false && searcher != null) {
> %>
>                 <table width="700">
>                 <th>Title</th>
>                 <th>Url</th>
>                 <th>Created</th>
> <%
>                 if ((startindex + maxpage) > hits.length()) {
>                         thispage = hits.length() - startindex;      //
> set the max index to maxpage or last
>                 }                                                   //
> actual search result whichever is less
>                 numRecords = thispage + startindex;
>                 for (i = startindex; i < (thispage + startindex); i++)
> {  // for each element
> %>
>                 <tr id="<%=i%>" bgColor='#F6F6F6'
>
> onClick="changeColor(this);parent.frames[1].Escape('<%=rowid%>','<%=hotWord%>');">
> <%
>                         Document doc = hits.doc(i);
> //get the next document
>                         String doctitle = doc.get("title");
> //get its title
>                         url = doc.get("url");                   //get
> its url field
>                         if ((doctitle == null) || doctitle.equals(""))
> //use the url if it has no title
>                                 doctitle = url;
>                         String summary = doc.get("summary");
>                         StringTokenizer st = new
> StringTokenizer(summary.substring(25, summary.length()), "###");
>                         while(st.hasMoreTokens())
>                         {
>                             sender = st.nextToken();
>                             rowid = st.nextToken();
>                             urlString = st.nextToken();
>                             modified = st.nextToken();
>                             domain_name = st.nextToken();
>                             userid =
> st.nextToken();
>                             rowid = rowid.trim();
>                         }
>                        // out.println("sender" + sender + "rowid" +
> rowid + "urlString" + urlString + "modified" + modified + "domain_name"
> + domain_name + "userid" + userid);
>
>
>
>
>
> //then output!
> %>
>                         <td   width="280" class="fontClass"
> color="#ffffff">
>                           <a id=<%=i%>   href=
> "javascript:Escape('<%=rowid%>','<%=hotWord%>');"  target="bot"">
>                           <div id="<%="div" + i%>"><%=doctitle%></div></a>
>                           </td>
>                         <%if (sender == null ||
> sender.trim().equals("null"))
>                            {
>                     %>
>                           <td  width="280" class="fontClass"
> ><%=urlString%></td>
>                     <%
>                            }
>                            else
>                            {
>                     %>
>                        <td   width="280" class="fontClass"
> ><%=sender%></td>
>                     <%
>                             }
>                     %>
>                         <td  width="140" class="fontClass">
>                            <%=modified.substring(0,10)%></td>
>                 </tr>
>                 <div type="hidden" id="<%="divv" + i%>"
> style="display:none"><%=rowid%></div>
> <%
>                 }
> %>
> <%                if ( (startindex + maxpage) < hits.length()) {   //if
> there are more results...display
>                                                                    //the
> more link
>
>                         String moreurl="results.jsp?query=" +
>                                        URLEncoder.encode(queryString) +
> //construct the "more" link
>                                        "&amp;maxresults=" + maxpage +
>                                        "&amp;startat=" + (startindex +
> maxpage);
> %>
>                 <tr>
>                         <td></td><td><a href="<%=moreurl%>">More
> Results>></a></td>
>                 </tr>
> <%
>                 }
> %>
>                 </table>
>
> <%       }                                            //then include our
> footer.
>          if (searcher != null)
>                 searcher.close();
> %>
>
> <SCRIPT LANGUAGE="JavaScript">
> function changeColor(currentHref)
> {
>     for (var id = 0; id <=<%=numRecords - 1%>; id++)
>     {
>     if (id != currentHref.id)
>         document.getElementById(id).bgColor='#F6F6F6';
>     else
>         document.getElementById(id).bgColor='#9E9C91';
>     }
> }
> </script>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>