You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Gaurav Srivastava <ga...@pranenterprises.com> on 2007/03/15 04:47:58 UTC
Please suggest how to use the different analyse to accomodate number
and alphanumeric search
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("&", "&");
s = s.replaceAll("<", "<");
s = s.replaceAll(">", ">");
s = s.replaceAll("\"", """);
s = s.replaceAll("'", "'");
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
"&maxresults=" + maxpage +
"&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: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
Re: Please suggest how to use the different analyse to accomodate number and alphanumeric search
Posted by Erick Erickson <er...@gmail.com>.
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 <ga...@pranenterprises.com> 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("&", "&");
> s = s.replaceAll("<", "<");
> s = s.replaceAll(">", ">");
> s = s.replaceAll("\"", """);
> s = s.replaceAll("'", "'");
> 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
> "&maxresults=" + maxpage +
> "&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: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>