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;
}
%>
<[EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]